我编写了以下python代码片段,在txt文件的每一行附加一个较低的p字符:
f = open('helloworld.txt','r')
for line in f:
line+='p'
print(f.read())
f.close()
然而,当我执行这个python程序时,它只返回一个空白空白:
zhiwei@zhiwei-Lenovo-Rescuer-15ISK:~/Documents/1001/ass5$ python3 helloworld.py
有谁能告诉我我的代码有什么问题?
答案 0 :(得分:2)
目前,您只是阅读每一行而不是写入文件。以写入模式重新打开文件并将完整的字符串写入其中,如下所示:
newf=""
with open('helloworld.txt','r') as f:
for line in f:
newf+=line.strip()+"p\n"
f.close()
with open('helloworld.txt','w') as f:
f.write(newf)
f.close()
答案 1 :(得分:1)
open(filePath, openMode)
有两个参数,第一个是文件的路径,第二个是打开它的模式。当您使用'r'
作为第二个参数时,您实际上是在告诉Python将其作为唯一的读取文件打开。
如果要在其上书写,则需要以写入模式打开它,使用'w'
作为第二个参数。您可以在official documentation中找到有关如何使用Python读/写文件的更多信息。
如果要同时读写,则必须以读写模式打开文件。您只需使用'r+'
模式即可完成此操作。
答案 2 :(得分:1)
好吧,在shell中输入help(f),你可以获得“BufferedIOBase对象上的基于字符和行的图层,缓冲区”。 它的意思是:如果你读第一个缓冲区,你可以获得内容,但又一次。它是空的。 像这样:
with open(oldfile, 'r') as f1, open(newfile, 'w') as f2:
newline = ''
for line in f1:
newline+=line.strip()+"p\n"
f2.write(newline)
答案 3 :(得分:0)
似乎你的for循环已经将文件读到最后,所以f.read()
返回空字符串。
如果您只需要在文件中打印行,则可以将打印移动到for循环中,就像print(line)
一样。最好在for循环之前移动f.read():
f = open("filename", "r")
lines = f.readlines()
for line in lines:
line += "p"
print(line)
f.close()
如果您需要修改文件,则需要创建另一个文件obj并以“w”模式打开它,并使用f.write(line)
将修改后的行写入新文件。
此外,最好在python中使用with子句而不是open(),它更像pythonic。
with open("filename", "r") as f:
lines = f.readlines()
for line in lines:
line += "p"
print(line)
使用with子句时,您无需关闭文件,这更简单。