Appending characters to each line in a txt file with python

二次信任 提交于 2021-02-04 19:50:30

问题


I wrote the following python code snippet to append a lower p character to each line of a txt file:

f = open('helloworld.txt','r')
for line in f:
    line+='p'
print(f.read())
f.close()

However, when I execute this python program, it returns nothing but an empty blank:

zhiwei@zhiwei-Lenovo-Rescuer-15ISK:~/Documents/1001/ass5$ python3 helloworld.py

Can anyone tell me what's wrong with my codes?


回答1:


Currently, you are only reading each line and not writing to the file. reopen the file in write mode and write your full string to it, like so:

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()



回答2:


well, type help(f) in shell, you can get "Character and line based layer over a BufferedIOBase object, buffer." it's meaning:if you reading first buffer,you can get content, but again. it's empty。 so like this:

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:


open(filePath, openMode) takes two arguments, the first one is the path to your file, the second one is the mode it will be opened it. When you use 'r' as second argument, you are actually telling Python to open it as an only reading file.

If you want to write on it, you need to open it in writing mode, using 'w' as second argument. You can find more about how to read/write files in Python in its official documentation.

If you want to read and write at the same time, you have to open the file in both reading and writing modes. You can do this simply by using 'r+' mode.




回答4:


It seems that your for loop has already read the file to the end, so f.read() return empty string.

If you just need to print the lines in the file, you could move the print into for loop just like print(line). And it is better to move the f.read() before for loop:

f = open("filename", "r")
lines = f.readlines()
for line in lines:
    line += "p"
    print(line)
f.close()

If you need to modify the file, you need to create another file obj and open it in mode of "w", and use f.write(line) to write the modified lines into the new file.

Besides, it is more better to use with clause in python instead of open(), it is more pythonic.

with open("filename", "r") as f:
    lines = f.readlines()
    for line in lines:
        line += "p"
        print(line)

When using with clause, you have no need to close file, this is more simple.



来源:https://stackoverflow.com/questions/47276506/appending-characters-to-each-line-in-a-txt-file-with-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!