Linux | 大文件上传/下载麻烦、容易中断,如何分割上传/下载

科技   2024-12-11 18:26   浙江  


不知道你有没有遇到过类似情况:一个几百G的文件要上传到百度云或者其他地方,本地网络不稳定的时候经常断,断了就得重新输入指令或者选择上传。

文本段落分享如何将本地大文件分割,这样我们可以同时上传多个分割后的文件。

Mac 和 Linux 下都可以直接使用split指令:

# 把 temp.txt 分割成5块
split  -n 5  temp.txt temp-part-

合并方法:

cat temp-part-* > combined_temp.txt

Windows 下比价复杂,建议直接使用Python代码实现,脚本如下:

import os

def split_file(file_path, output_dir, num_chunks):
    '''
    file_path: 要分割的文件
    output_dir: 分割后文件存放目录
    num_chunks: 分割块数
    '''

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    file_size = os.path.getsize(file_path)
    chunk_size = file_size // num_chunks
    with open(file_path, 'rb'as f:
        for i in range(num_chunks):
            chunk_file = os.path.join(output_dir, f'chunk_{i}.part')
            with open(chunk_file, 'wb'as chunk:
                chunk.write(f.read(chunk_size))
        # Write any remaining bytes (for non-even division of file size)
        remaining_data = f.read()
        if remaining_data:
            with open(os.path.join(output_dir, f'chunk_{num_chunks}.part'), 'wb'as chunk:
                chunk.write(remaining_data)

# 使用示例
split_file('largefile.txt''output_chunks'5)

合并代码:

def merge_files(input_dir, output_file):
    '''
    input_dir: 要合并文件所在文件夹
    output_file: 合并后文件路径
    '''

    with open(output_file, 'wb'as f:
        for chunk_file in sorted(os.listdir(input_dir)):
            with open(os.path.join(input_dir, chunk_file), 'rb'as chunk:
                f.write(chunk.read())

# 使用示例
merge_files('output_chunks''combined_largefile.txt')

以上,over

如有其他问题,欢迎评论!我是老表,我的微信:pythonbrief

关注我,学习跟多实用技巧!

简说Python
号主老表,自学,分享Python,SQL零基础入门、数据分析、数据挖掘、机器学习优质文章以及学习经验。
 最新文章