一文教會你如何用 Python 分割合并大文件
有時候,我們需要把一個大文件發送給別人,但是限于傳輸通道的限制,比如郵箱附件大小的限制,或者網絡狀況不太好,需要將大文件分割成小文件,分多次發送,接收端再對這些小文件進行合并。今天就來分享一下用 Python 分割合并大文件的方法。
思路及實現
如果是文本文件,可以按行數分割。無論是文本文件還是二進制文件,都可以按指定大小進行分割。
使用 Python 的文件讀寫功能就可以實現文件的分割與合并,設置每個文件的大小,然后讀取指定大小的字節就寫入一個新文件,接收端依次讀取小文件,把讀取到的字節按序寫入一個文件,就可以完成合并。
分割
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())
使用第三方庫
雖然可以自己寫,但是別人寫好了,為什么不節省點時間直接用呢?直接 pip 安裝就可以了:
pip install filesplit
分割
from filesplit.split import Split
split = Split("./data.rar", "./output")
split.bysize(size = 1024*1000*10) # 每個文件最多 10MB
執行之后,我們就可以在 output 文件夾里看到分割好的文件:
你也可以按照文件行數進行分割:
split.bylinecount(linecount = 10000) # 每個文件最多 10000 行
合并
合并需要對文件夾里的小文件進行合并,該工具要求文件夾內必須有 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
合并文件的代碼只需要指定要合并的目錄,目標目錄,合并后的文件名,代碼如下:
from filesplit.merge import Merge
merge = Merge(inputdir = "./output", outputdir="./merge", outputfilename = "merged.rar")
merge.merge()
執行之后就可以在 merge 目錄內看到合并后的文件: