嘿我需要将python中的大文件拆分成只包含特定行的较小文件。我该怎么做?
答案 0 :(得分:5)
你可能想要做这样的事情:
big_file = open('big_file', 'r')
small_file1 = open('small_file1', 'w')
small_file2 = open('small_file2', 'w')
for line in big_file:
if 'Charlie' in line: small_file1.write(line)
if 'Mark' in line: small_file2.write(line)
big_file.close()
small_file1.close()
small_file2.close()
打开要读取的文件会返回一个对象,该对象允许您遍历这些行。然后,您可以根据需要检查每一行(只是该行所包含的字符串),然后将其写入您为写入而打开的相应文件。值得注意的是,当您使用“w”打开文件时,它将覆盖已写入该文件的任何内容。如果你想简单地添加到最后,你应该用'a'打开它来附加。
此外,如果您希望在读/写代码中出现错误,并且想要确保文件已关闭,您可以使用:
with open('big_file', 'r') as big_file:
<do stuff prone to error>
答案 1 :(得分:1)
你的意思是把它分解成小节吗?就像我有第1章,第2章和第3章的文件一样,您希望将它分解为每章的单独文件吗?
我这样做的方式类似于Wilduck的响应,但是一旦读入数据就关闭输入文件并保持读取所有行。
data_file = open('large_file_name', 'r')
lines = data_file.readlines()
data_file.close()
outputFile = open('output_file_one', 'w')
for line in lines:
if 'SomeName' in line:
outputFile.write(line)
outputFile.close()
如果您想拥有多个输出文件,可以添加更多循环或一次打开多个outputFile。
但是,我建议使用Wilducks响应,因为它占用的空间更少,文件只读取一次所需的时间更少。
答案 2 :(得分:0)
在python中需要做多大?如果这是在unix上,会拆分/ csplit / grep吗?
答案 3 :(得分:0)
首先,打开大文件进行阅读。
其次,打开所有较小的文件名进行书写。
第三,遍历每一行。每次迭代,检查它是什么类型的行,然后将其写入该文件。
有关文件I / O的更多信息:http://docs.python.org/tutorial/inputoutput.html