【问题标题】:Appending a specific line after having found it in Python [duplicate]在 Python 中找到特定行后附加它[重复]
【发布时间】:2016-03-26 14:10:05
【问题描述】:

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

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 中的第三个元素,而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

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

【问题讨论】:

  • 我会选择csv 模块,请参阅stackoverflow.com/questions/16020858/…
  • 我同意@alexce - 如果您可以使用 csv.DictReader 和 csv.DictWriter 读取和写入数据,您可能可以获得更多控制权,但您的基本问题已经得到解答,可以完成但是不明智

标签: python file writing


【解决方案1】:

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

一般逻辑如下:

  1. 打开输入文件和一个临时输出文件。
  2. 从输入文件中读取一行:
    1. 如果匹配替换条件,则将新修改的行写入临时输出文件;否则按原样将该行写入输出文件。
  3. 处理完所有行后,关闭输入文件。
  4. 删除输入文件。
  5. 将临时文件重命名为与输入文件同名。

在 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')

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 2013-11-12
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多