我正在编写一个函数,允许用户查找特定行(在文件中)中的内容,并替换该行中的部分内容,并将其重新写入同一行的文件中。 / p>
def editPlayer():
print "What information would you like to edit?"
print "1- Forname"
print "2- Surname"
print "3- Email address"
choice = int(raw_input(""))
f = open("persons.txt","r+")
for i in range(2): # number of type of information
if choice == i: #check if choice equal current running of i
line[choice-1] = str(raw_input("Enter new information: ")) #modify choice-1's element in line
lineStr = line[0] + ";" + line[1] + ";" + line[2] #makes list in a string
以上代码有效,即如果用户要编辑播放器的电子邮件地址,他的输入将更改line
中的第3个元素,而lineStr
将包含所有信息,包括修改后的电子邮件地址以相同的顺序。
我被困在需要将lineStr
重新写入我的文件的位置,与原始文件位于同一行。文件看起来像这样
Joe;Bloggs;j.bloggs@anemailaddress.com
Sarah;Brown;s.brown@anemailaddress.com
问题出现是因为写作时
f.write(lineStr)
文件的第一行将被替换,所以如果我要修改Sarah的第二个名字(到Stack)并将其写入文件,该文件看起来像
Sarah;Stack;s.brown@anemailaddress.com
Sarah;Brown;s.brown@anemailaddress.com
而不是它应该如何看待,即:
Joe;Bloggs;j.bloggs@anemailaddress.com
Sarah;Stack;s.brown@anemailaddress.com
有人能引导我朝着正确的方向前进吗?任何帮助,将不胜感激。谢谢
答案 0 :(得分:2)
您需要这样做以及大多数程序执行此操作的方式是使用正确的输出编写临时文件,然后替换原始文件。这是最简单的方法。
这是一般逻辑:
在Python中实现它:
import os
with open('input.txt') as i, open('output.txt', 'w') as o:
for line in i:
if line.startswith('Replace Me:'):
line = 'New line, replaced the old line.\n'
o.write(line)
os.rename('output.txt', 'input.txt')