分割 / 合并大文件的简单 python 代码
使用方法
分割: python fs.py -n <分割后的文件个数> <要分割的文件>
合并: python fs.py -m <分割文件1> <分割文件2> ...
示例
PS C:\Users\Administrator\Desktop> python fs.py
使用方法:
分割: python fs.py -n <分割后的文件个数> <要分割的文件>
合并: python fs.py -m <分割文件1> <分割文件2> ...
PS C:\Users\Administrator\Desktop> python fs.py -n 3 .\python-3.13.2-amd64.exe
文件分割完成,共生成 3 个分割文件。
PS C:\Users\Administrator\Desktop> python fs.py -m python-3.13.2-amd64.exe.01 python-3.13.2-amd64.exe.02 python-3.13.2-amd64.exe.03
文件合并完成。
源代码
import os
import sys
def split_file(file_path, num_parts):
try:
file_size = os.path.getsize(file_path)
chunk_size = file_size // num_parts
remainder = file_size % num_parts
with open(file_path, 'rb') as file:
for i in range(num_parts):
part_file_name = f"{file_path}.{str(i + 1).zfill(2)}"
with open(part_file_name, 'wb') as part_file:
if i < num_parts - 1:
part_data = file.read(chunk_size)
else:
part_data = file.read(chunk_size + remainder)
part_file.write(part_data)
print(f"文件分割完成,共生成 {num_parts} 个分割文件。")
except Exception as e:
print(f"文件分割出错: {e}")
def merge_files(part_files, output_file):
try:
with open(output_file, 'wb') as output:
for part_file in sorted(part_files):
if os.path.exists(part_file):
with open(part_file, 'rb') as part:
output.write(part.read())
# 删除分割文件
os.remove(part_file)
print("文件合并完成。")
except Exception as e:
print(f"文件合并出错: {e}")
if __name__ == "__main__":
if len(sys.argv) < 3:
print("使用方法:")
print("分割: python fs.py -n <分割后的文件个数> <要分割的文件>")
print("合并: python fs.py -m <分割文件1> <分割文件2> ...")
sys.exit(1)
if sys.argv[1] == '-n':
if len(sys.argv) != 4:
print("分割命令参数错误,正确格式: python fs.py -n <分割后的文件个数> <要分割的文件>")
sys.exit(1)
try:
num_parts = int(sys.argv[2])
file_to_split = sys.argv[3]
split_file(file_to_split, num_parts)
except ValueError:
print("分割后的文件个数必须是整数。")
elif sys.argv[1] == '-m':
part_files = sys.argv[2:]
if not part_files:
print("合并命令缺少分割文件参数。")
sys.exit(1)
output_file = '.'.join(part_files[0].split('.')[:-1])
merge_files(part_files, output_file)
else:
print("未知参数,请使用 -n 进行分割,-m 进行合并。")