将文本添加到文件的第一行 [重复]
Posted
技术标签:
【中文标题】将文本添加到文件的第一行 [重复]【英文标题】:Add text to the first line of a file [duplicate] 【发布时间】:2013-04-25 22:55:23 【问题描述】:我有一行 Python 代码产生了我想要的东西。代码是:
os.system('cat 0|egrep 1 > file.txt' .format(full,epoch))
并生成了一个包含以下内容的文件:
3 321.000 53420.7046629965511 0.299 0.00000
3 325.000 53420.7046629860714 0.270 0.00000
3 329.000 53420.7046629846442 0.334 0.00000
3 333.000 53420.7046629918374 0.280 0.00000
然后我只是想调整代码,以便在顶部显示“TEXT 1”,所以我尝试了我脑海中出现的第一件事,并将代码更改为:
h = open('file.txt','w')
h.write('MODE 2\n')
os.system('cat 0|egrep 1 > file.txt' .format(full,epoch))
当我这样做时,我得到了输出:
TEXT 1
317.000 54519.6975201839344 0.627 0.00000
3 321.000 54519.6975202038578 0.655 0.00000
3 325.000 54519.6975201934045 0.608 0.00000
3 329.000 54519.6975201919911 0.612 0.00000
即“TEXT 1”之后的第一行不正确,并且缺少第一个“3”。谁能告诉我我做错了什么,并且可能是完成这个简单任务的更好方法。
谢谢。
【问题讨论】:
查看这篇文章:***.com/questions/4454298/… 【参考方案1】:您可以按照自己的方式调用 grep,也可以使用 subprocess.call(),这是我的首选方法。
方法一:使用os.system()
os.system('echo TEXT 1 >file.txt; egrep 1 0 >> file.txt'.format(full, epoch))
此方法将在调用egrep
之前添加TEXT 1。请注意,您不需要cat
。
方法二:使用subprocess.call()
with open('out.txt', 'wb') as output_file:
output_file.write('TEXT 1\n')
output_file.flush()
subprocess.call(['egrep', epoch, full], stdout=output_file)
这是我的首选方法有几个原因:您可以更好地控制输出文件,例如在打开失败时处理异常的能力。
【讨论】:
【参考方案2】:您使用 python 打开一个文件句柄,写入它,但 Python 将其留给操作系统进行刷新等 - 按照设计,如果想要在文件 之前 写入一些东西else 被写入,你需要手动 flush
它(事实上,你需要 flush
和 fsync
)。
另一个注意事项:> file.txt
创建一个新文件,而您可能希望追加 - 将其写为>> file.txt
。简而言之:您的代码可能比您想象的更不确定。
另一种方法是使用 subprocess 模块,因为您已经处于 shell 级别:
from subprocess import call
sts = call("echo 'TEXT 1' > file.txt", shell=True)
sts = call("cat 0|egrep 1 >> file.txt".format(full,epoch), shell=True)
【讨论】:
以上是关于将文本添加到文件的第一行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章