编写一个名为 的函数file_split(filename, number_of_files),将输入文件拆分为多个输出文件。文件应尽可能均匀地分割。当文件长度能被要创建的文件数整除时(一个10行的文件,分成2个文件,每个输出文件应有5行。当长度不能被创建的文件数整除时,所有输出文件\xe2\x80\x99 length 的差异不得大于 1。例如,一个 10 行的文件分成 3 行,则输出文件的长度为 3、3 和 4。
我已经编写了代码,但我不知道如何实现大于 1 部分的差异,我需要帮助修改我的代码以包含该部分。(如果它不是偶数倍,我的代码会为最后一行创建一个新文件)
\n\ndef 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\nRun Code Online (Sandbox Code Playgroud)\n
循环法有效并且很简单:
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)