在Python

时间:2016-03-26 14:10:05

标签: python file writing

我正在编写一个函数,允许用户查找特定行(在文件中)中的内容,并替换该行中的部分内容,并将其重新写入同一行的文件中。 / 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

有人能引导我朝着正确的方向前进吗?任何帮助,将不胜感激。谢谢

1 个答案:

答案 0 :(得分:2)

您需要这样做以及大多数程序执行此操作的方式是使用正确的输出编写临时文件,然后替换原始文件。这是最简单的方法。

这是一般逻辑:

  1. 打开输入文件和临时输出文件。
  2. 从输入文件中读取一行:
    1. 如果匹配替换条件,则将新修改的行写入临时输出文件;否则将该行按原样写入输出文件。
  3. 一旦所有行都处理完毕,请关闭输入文件。
  4. 删除输入文件。
  5. 使用与输入文件相同的名称重命名临时文件。
  6. 在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')