我想将一个非常大的.txt文件拆分成相等的文件,每个文件包含N行。并将其保存到文件夹
with open('eg.txt', 'r') as T: while True: next_n_lines = islice(T, 300) f = open("split" + str(x.pop()) + ".txt", "w") f.write(str(next_n_lines)) f.close()
但这会创建一个包含数据的文件
" < itertools.islice object at 0x7f8fa94a4940 >"
在txt
文件中。
我想保留原始txt
文件中保留的相同结构和样式。
并且此代码到达文件末尾时也不会自动终止。如果可能的话,我将使代码停止写入文件,如果没有剩余数据要写入,则退出。
您可以iter
与一起使用islice
,使用枚举一次使n行,为文件赋予唯一的名称。 f.writelines
将每行列表写入一个新文件:
with open('eg.txt') as T: for i, sli in enumerate(iter(lambda:list(islice(T, 300)), []), 1): with open("split_{}.txt".format(i), "w") as f: f.writelines(sli)
您的代码将永远循环,因为您不包含任何中断条件,将其iter
与空列表一起使用将意味着循环在迭代器用尽时结束。
此外,如果你想传递一个islice对象写入你只需调用writelines
就可以了,即f.writelines(next_n_lines)
,str(next_n_lines)
。