一文教會(huì)你如何用 Python 分割合并大文件
有時(shí)候,我們需要把一個(gè)大文件發(fā)送給別人,但是限于傳輸通道的限制,比如郵箱附件大小的限制,或者網(wǎng)絡(luò)狀況不太好,需要將大文件分割成小文件,分多次發(fā)送,接收端再對(duì)這些小文件進(jìn)行合并。今天就來分享一下用 Python 分割合并大文件的方法。
思路及實(shí)現(xiàn)
如果是文本文件,可以按行數(shù)分割。無論是文本文件還是二進(jìn)制文件,都可以按指定大小進(jìn)行分割。
使用 Python 的文件讀寫功能就可以實(shí)現(xiàn)文件的分割與合并,設(shè)置每個(gè)文件的大小,然后讀取指定大小的字節(jié)就寫入一個(gè)新文件,接收端依次讀取小文件,把讀取到的字節(jié)按序?qū)懭胍粋€(gè)文件,就可以完成合并。
分割
size = 1024 * 1000 * 10 # 10MB
with open("bigfile", "rb") as reader:
part = 1
while True:
part_content = reader.read(size)
if not part_content:
print("split done.")
break
with open(f"bigfile_part{part}","wb") as writer:
writer.write(part_content)
合并
total_parts = 5
with open("bigfile","wb") as writer:
for i in range(5):
with open(f"bigfile_part{i}", "rb") as reader:
writer.write(reader.read())
使用第三方庫
雖然可以自己寫,但是別人寫好了,為什么不節(jié)省點(diǎn)時(shí)間直接用呢?直接 pip 安裝就可以了:
pip install filesplit
分割
from filesplit.split import Split
split = Split("./data.rar", "./output")
split.bysize(size = 1024*1000*10) # 每個(gè)文件最多 10MB
執(zhí)行之后,我們就可以在 output 文件夾里看到分割好的文件:
你也可以按照文件行數(shù)進(jìn)行分割:
split.bylinecount(linecount = 10000) # 每個(gè)文件最多 10000 行
合并
合并需要對(duì)文件夾里的小文件進(jìn)行合并,該工具要求文件夾內(nèi)必須有 manifest 文件,其格式如下:
filename,filesize,header
data_1.rar,10000000,False
data_2.rar,10000000,False
data_3.rar,10000000,False
data_4.rar,10000000,False
data_5.rar,1304145,False
合并文件的代碼只需要指定要合并的目錄,目標(biāo)目錄,合并后的文件名,代碼如下:
from filesplit.merge import Merge
merge = Merge(inputdir = "./output", outputdir="./merge", outputfilename = "merged.rar")
merge.merge()
執(zhí)行之后就可以在 merge 目錄內(nèi)看到合并后的文件: