我需要在文本文件的第一行添加一行,看起来我可用的唯一选项是比我期望的python更多的代码行.像这样的东西:
f = open('filename','r')
temp = f.read()
f.close()
f = open('filename', 'w')
f.write("#testfirstline")
f.write(temp)
f.close()
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法?另外,我看到这个双句柄示例比打开单个句柄进行读写('r +')更常见 - 为什么会这样?
Nic*_*ght 84
Python使很多事情变得简单,并且包含许多常见操作的库和包装器,但目标不是隐藏基本事实.
您在这里遇到的基本事实是,您通常无法在不重写整个结构的情况下将数据添加到现有的平面结构中.无论语言如何都是如此.
有一些方法可以保存文件句柄或使代码的可读性降低,其中许多都是在其他答案中提供的,但没有一种方法可以改变基本操作:您必须读取现有文件,然后写出要添加的数据,然后是您读入的现有数据.
无论如何都要保存文件句柄,但不要将此操作打包成尽可能少的代码行.事实上,永远不要寻找最少的代码行 - 这是混淆,而不是编程.
Kar*_*tel 63
我会坚持单独的读写,但我们当然可以更简洁地表达:
Python2:
with file('filename', 'r') as original: data = original.read()
with file('filename', 'w') as modified: modified.write("new first line\n" + data)
Run Code Online (Sandbox Code Playgroud)
Python3:
with open('filename', 'r') as original: data = original.read()
with open('filename', 'w') as modified: modified.write("new first line\n" + data)
Run Code Online (Sandbox Code Playgroud)
注意:python3中没有file()函数.
Mor*_*ock 21
其他方法:
with open("infile") as f1:
with open("outfile", "w") as f2:
f2.write("#test firstline")
for line in f1:
f2.write(line)
Run Code Online (Sandbox Code Playgroud)
或一个班轮:
open("outfile", "w").write("#test firstline\n" + open("infile").read())
Run Code Online (Sandbox Code Playgroud)
感谢有机会思考这个问题:)
干杯
with open("file", "r+") as f: s = f.read(); f.seek(0); f.write("prepend\n" + s)
Run Code Online (Sandbox Code Playgroud)