简体   繁体   中英

Appending characters to each line in a txt file with python

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?

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

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.

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)   

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM