使用python将字符附加到txt文件中的每一行

时间:2017-11-14 02:01:33

标签: python python-2.7 python-3.x python-3.5

我编写了以下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

有谁能告诉我我的代码有什么问题?

4 个答案:

答案 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子句时,您无需关闭文件,这更简单。