Python 将文件分割成多个较小的文件

Rek*_*bot 2 python split file

编写一个名为 的函数file_split(filename, number_of_files),将输入文件拆分为多个输出文件。文件应尽可能均匀地分割。当文件长度能被要创建的文件数整除时(​​一个10行的文件,分成2个文件,每个输出文件应有5行。当长度不能被创建的文件数整除时,所有输出文件\xe2\x80\x99 length 的差异不得大于 1。例如,一个 10 行的文件分成 3 行,则输出文件的长度为 3、3 和 4。

\n\n

我已经编写了代码,但我不知道如何实现大于 1 部分的差异,我需要帮助修改我的代码以包含该部分。(如果它不是偶数倍,我的代码会为最后一行创建一个新文件)

\n\n
def get_line_counts(filename, number_of_files):\n    try:\n        my_file = open(filename, \'r\')\n    except IOError:\n        print("File does not exist")\n        return    \n    input = my_file.read().split(\'\\n\')\n    outputBase = \'lel\'    \n    total_lines = 0\n    with open(\'myfile.txt\') as infp:\n        for line in infp:\n            if line.strip():  \n                total_lines +=1    \n    base_size = total_lines // number_of_files    \n    at = 1\n    for lines in range(0, len(input), base_size):\n        outputData = input[lines:lines+base_size]\n        output = open(outputBase + str(at) + \'.txt\', \'w\')\n        output.write(\'\\n\'.join(outputData))\n        output.close()\n        at += 1\n
Run Code Online (Sandbox Code Playgroud)\n

Ste*_*ann 5

循环法有效并且很简单:

with open('myfile.txt') as infp:
    files = [open('%d.txt' % i, 'w') for i in range(number_of_files)]
    for i, line in enumerate(infp):
        files[i % number_of_files].write(line)
    for f in files:
        f.close()
Run Code Online (Sandbox Code Playgroud)