Python文件每次打开/关闭,而不是一直打开直到进程完成

2024-04-19 16:47:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大约50gb的文本文件,我正在检查每行的前几个字符,并将这些字符写入为起始文本指定的其他文件。

例如。 我的输入包含:

cow_ilovecow
dog_whreismydog
cat_thatcatshouldgotoreddit
dog_gotitfromshelter
...............

所以,我想把它们分为牛、狗和猫(大约200种)三类 所以

if writeflag==1:
    writefile1=open(writefile,"a") #writefile is somedir/dog.txt....
    writefile1.write(remline+"\n")
    #writefile1.close()

那么,什么是最好的方式,我应该关闭?否则,如果我保持打开,那么writefile1=open(writefile,"a")做的是正确的事情吗?


Tags: 文件文本ifopen字符cat文本文件dog
3条回答

你一定要尽量少打开/关闭文件

因为即使与文件读/写相比,文件打开/关闭也要贵得多

考虑两个代码块:

f=open('test1.txt', 'w')
for i in range(1000):
    f.write('\n')
f.close()

以及

for i in range(1000):
    f=open('test2.txt', 'a')
    f.write('\n')
    f.close()

第一个需要0.025s而第二个需要0.309s

一直开着!否则,您会告诉系统您已经完成了所有时间的写入,它可能会决定将它刷新到磁盘上,而不是缓冲它。显然,磁盘写入比磁盘写入要贵得多。

如果您想附加到文件而不覆盖它,那么可以,a是正确的模式。

使用with语句,它会自动为您关闭文件,执行with块中的所有操作,因此它会为您保持文件打开状态,并在您离开with块后关闭文件。

with open(inputfile)as f1, open('dog.txt','a') as f2,open('cat.txt') as f3:
   #do something here

编辑: 如果您知道在编译代码之前使用的所有可能的文件名,那么使用with是一个更好的选择,如果您不知道,那么您应该使用您的方法,但是您可以使用flush将数据发送到文件,而不是关闭文件

相关问题 更多 >