正在加载智慧...

前言

在Python编程中,我们常常需要处理大文件,而有时候需要将大文件拆分成多个小文件进行处理,例如进行数据分析、数据挖掘等等。本文将介绍Python如何实现大文件分割的方法。

步骤

1.导入必要的模块,包括os模块和sys模块。

2.定义一个函数split_data,该函数接收三个参数:file_path表示原始大文件的路径,num_lines_per_file表示每个分割文件包含的行数,output_dir表示分割后的文件存放目录。

3.使用with open语句打开原始大文件,调用readlines()方法读取全部内容并保存到变量lines中。

4.根据num_lines_per_file计算需要分割成多少个小文件,每个小文件包含多少行数据。

5.使用for循环遍历每个小文件,根据起始行和结束行截取相应的数据块,使用with open语句将数据块写入到一个新的小文件中。

6.为每个小文件命名,以数字序列递增的方式命名,例如1.txt、2.txt等等,使用os.path.join函数将文件名和目录名组合成完整的文件路径。

7.保存小文件并打印输出相应信息。

8.在主程序中,定义原始大文件的路径、每个小文件包含的行数和分割后的文件存放目录。

9.判断分割后的文件存放目录是否存在,如果不存在则创建该目录。

10.调用split_data函数进行文件分割。

完整代码如下:

import os

def split_data(file_path, num_lines_per_file, output_dir):
    with open(file_path, 'r') as f:
        lines = f.readlines()

    num_files = len(lines) // num_lines_per_file + 1
    file_count = 1  # 起始文件名
    for i in range(num_files):
        start = i * num_lines_per_file
        end = start + num_lines_per_file
        block = lines[start:end]

        output_file_name = os.path.join(output_dir, f'{file_count}.txt')
        with open(output_file_name, 'w') as f:
            for line in block:
                f.write(line)
        file_count += 1

        print(f'Saved {output_file_name} successfully.')

file_path = r'C:\Users\阿铭\Desktop\160.txt'
num_lines_per_file = 20
output_dir = r'C:\Users\阿铭\Desktop\160'  # 设置输出目录

if not os.path.isdir(output_dir):
    os.mkdir(output_dir)

split_data(file_path, num_lines_per_file, output_dir)

运行结果:

Saved C:\Users\阿铭\Desktop\160\1.txt successfully.
Saved C:\Users\阿铭\Desktop\160\2.txt successfully.
Saved C:\Users\阿铭\Desktop\160\3.txt successfully.
Saved C:\Users\阿铭\Desktop\160\4.txt successfully.
Saved C:\Users\阿铭\Desktop\160\5.txt successfully.
Saved C:\Users\阿铭\Desktop\160\6.txt successfully.
Saved C:\Users\阿铭\Desktop\160\7.txt successfully.
Saved C:\Users\阿铭\Desktop\160\8.txt successfully.

总结:

本文介绍了Python如何实现大文件分割的方法,通过编写Python程序,可以将大文件分割成多个小文件,方便进行数据处理和分析。同时,本文还介绍了os模块和sys模块的使用方法,可以帮助读者更好地理解Python编程中的文件操作和系统操作。

最后修改:2023 年 04 月 30 日
文章貌似没什么作用,随意打赏!