在Python中编辑文本文件的特定行
假设我有一个文本文件,里面的内容是:
Dan
Warrior
500
1
0
请问有没有办法让我编辑这个文本文件中的某一行?现在我有这个:
#!/usr/bin/env python
import io
myfile = open('stats.txt', 'r')
dan = myfile.readline()
print dan
print "Your name: " + dan.split('\n')[0]
try:
myfile = open('stats.txt', 'a')
myfile.writelines('Mage')[1]
except IOError:
myfile.close()
finally:
myfile.close()
是的,我知道 myfile.writelines('Mage')[1]
这个写法是错的。不过你明白我的意思,对吧?我想把第二行的“Warrior”替换成“Mage”。但我真的能做到这一点吗?
11 个回答
28
你可以使用 fileinput
来进行就地编辑,也就是说,你可以直接在文件里修改内容,而不需要先把文件的内容读出来再写回去。
import fileinput
for line in fileinput.FileInput("myfile", inplace=1):
if line .....: # select which lines you care about
print line
38
def replace_line(file_name, line_num, text):
lines = open(file_name, 'r').readlines()
lines[line_num] = text
out = open(file_name, 'w')
out.writelines(lines)
out.close()
replace_line('stats.txt', 0, 'Mage')
然后:
170
你想要做的事情大概是这样的:
# with is like your try .. finally block in this case
with open('stats.txt', 'r') as file:
# read a list of lines into data
data = file.readlines()
print data
print "Your name: " + data[0]
# now change the 2nd line, note that you have to add a newline
data[1] = 'Mage\n'
# and write everything back
with open('stats.txt', 'w') as file:
file.writelines( data )
这样做的原因是,你不能直接在文件里做“修改第二行”这种操作。你只能覆盖文件的某些部分(而不是删除),这意味着新的内容只是把旧的内容盖住了。所以,如果你把'Mage'写在第二行上,结果这一行就会变成'Mageior'。