python實(shí)現(xiàn)大文件分割與合并
很多時(shí)候我們會面臨大文件無法加載到內(nèi)存,或者要傳輸大文件的問題。這時(shí)候就需要考慮將大文件分割為小文件進(jìn)行處理了。
下面是一種用python分割與合并分件的實(shí)現(xiàn)。
import os FILE_DIR = os.path.dirname(os.path.abspath(__file__)) #======================================================== # 文件操作 #======================================================== def get_filelist1(dir, postfix): ''' 按照后綴返回文件名列表 INPUT -> 目錄地址, 文件后綴 OUTPUT -> 文件名列表 ''' return [os.path.join(dir, f) for f in os.listdir(dir) if f.endswith(postfix)] def get_filelist2(dir, preffix): ''' 按照前綴返回文件名列表 INPUT -> 目錄地址, 文件前綴 OUTPUT -> 文件名列表 ''' return [os.path.join(dir, f) for f in os.listdir(dir) if f.startswith(preffix)] def get_file_postfix(filename): ''' 獲取文件名后綴 INPUT -> 文件名 OUTPUT -> 文件后綴 ''' file = os.path.splitext(filename) preffix, postfix = file return postfix def get_file_preffix(filename): ''' 獲取文件名前綴 INPUT -> 文件名 OUTPUT -> 文件前綴 ''' file = os.path.splitext(filename) preffix, postfix = file return preffix def file_chunkspilt(path, filename, chunksize): ''' 文件按照數(shù)據(jù)塊大小分割為多個(gè)子文件 INPUT -> 文件目錄, 文件名, 每個(gè)數(shù)據(jù)塊大小 ''' if chunksize > 0: filepath = path+'/'+filename partnum = 0 inputfile = open(filepath, 'rb') while True: chunk = inputfile.read(chunksize) if not chunk: break partnum += 1 newfilename = os.path.join(path, (filename+'_%04d' % partnum)) sub_file = open(newfilename, 'wb') sub_file.write(chunk) sub_file.close() inputfile.close() else: print('chunksize must bigger than 0!') def file_linespilt(path, filename, limit): ''' 文件按照行分割成多個(gè)子文件 INPUT -> 文件目錄, 文件名, 行數(shù) ''' if limit > 0: preffix = get_file_preffix(filename) postfix = get_file_postfix(filename) file_count = 0 l_list = [] with open(path+'/'+filename, 'rb') as f: for line in f: l_list.append(line) if len(l_list) < limit: continue subfile = preffix+"_"+str(file_count)+"."+postfix with open(FILE_DIR+'/'+subfile, 'wb') as file: for l in l_list[:-1]: file.write(l) file.write(l_list[-1].strip()) l_list=[] file_count += 1 else: print('limit must bigger than 0!') def file_combine(path, filename): ''' 子文件合并 INPUT -> 文件目錄, 文件名 ''' filepath = path+'/'+filename partnum = 0 outputfile = open(filepath, 'wb') subfile_list = get_filelist2(FILE_DIR, filename+'_') for subfile in subfile_list: temp = open(subfile, 'rb') outputfile.write(temp.read()) temp.close() outputfile.close()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
舉例講解Python中metaclass元類的創(chuàng)建與使用
在Python中我們用type函數(shù)可以動態(tài)地創(chuàng)建一個(gè)元類,同樣也可以用__metaclass__屬性來指定一個(gè)元類,接下來我們就來具體舉例講解Python中metaclass元類的創(chuàng)建與使用2016-06-06Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例
這篇文章主要為大家介紹了Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python使用MySQLdb for Python操作數(shù)據(jù)庫教程
這篇文章主要介紹了Python使用MySQLdb for Python操作數(shù)據(jù)庫教程,詳細(xì)講述了MySQLdb的用法,針對Python操作MySQL數(shù)據(jù)庫程序設(shè)計(jì)具有很好的參考借鑒價(jià)值,需要的朋友可以參考下2014-10-10解決Tensorflow2.0 tf.keras.Model.load_weights() 報(bào)錯處理問題
這篇文章主要介紹了解決Tensorflow2.0 tf.keras.Model.load_weights() 報(bào)錯處理問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨想過來看看吧2020-06-06詳解Java中一維、二維數(shù)組在內(nèi)存中的結(jié)構(gòu)
這篇文章主要介紹了Java中一維、二維數(shù)組在內(nèi)存中的結(jié)構(gòu),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Python使用pyshp庫讀取shapefile信息的方法
今天小編就為大家分享一篇Python使用pyshp庫讀取shapefile信息的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12python3 wechatpy微信支付的項(xiàng)目實(shí)踐
本文主要介紹了python3 wechatpy微信支付的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01關(guān)于Python的高級數(shù)據(jù)結(jié)構(gòu)與算法
這篇文章主要介紹了關(guān)于Python的高級數(shù)據(jù)結(jié)構(gòu)與算法,掌握這些數(shù)據(jù)結(jié)構(gòu)和算法將幫助我們在實(shí)際編程中解決各種問題,提高我們的編程技巧和水平,需要的朋友可以參考下2023-04-04