如何在使用Python修改文件中的内容后保存更改

时间:2016-12-20 17:24:35

标签: python python-3.x

我想在文件" original.txt"中插入一行。 (该文件包含大约200行)。在现有行之一中找到字符串后,行neds将插入两行。这是我的代码,我使用了几个打印选项,告诉我该行正在添加到列表中,在我需要的位置,但文件" original.txt"没有被编辑

with open("original.txt", "r+") as file:
    lines = file.readlines()    # makes file into a list of lines
    print(lines)                #test
    for number, item in enumerate(lines):
        if testStr in item:
            i = number +2
            print(i)            #test
            lines.insert(i, newLine)
            print(lines)        #test
            break
file.close()

我正在将文本中的行转换为列表,然后在查找字符串时枚举行,将行的值分配给i并添加2,以便新行插入后两行, print()小说显示该行已添加到正确的位置,但文本" original.txt"未修改

2 个答案:

答案 0 :(得分:4)

您似乎误解了您的代码正在做什么。让我们一行一行

with open("original.txt", "r+") as file:       # open a file for reading
    lines = file.readlines()                   # read the contents into a list of lines
    print(lines)                               # print the whole file
    for number, item in enumerate(lines):      # iterate over lines
        if testStr in item:                    
            i = number +2                      
            print(i)            #test
            lines.insert(i, newLine)           # insert lines into the list
            print(lines)        #test
            break                              # get out of the look
file.close()                                   # not needed, with statement takes care of closing

您没有修改该文件。您将文件读入字符串列表并修改列表。要修改实际文件,您需要将其打开以进行写入并将列表重新写入其中。在代码末尾的这样的东西可能会起作用

with open("modified.txt", "w") as f:
    for line in lines: f.write(line)

答案 1 :(得分:1)

您从未修改过原始文字。您的代码将行读入本地内存,一次一个。识别触发器时,计算两行,然后将未定义值 newLine 插入本地副本。您的代码中没有任何内容可以修改原始文件。

一种方法是关闭文件,然后从最终的值重写它。在阅读文件时修改文件 - 最好全部阅读,然后开始处理。

另一种方法是随时写入新文件,然后使用系统命令将原始文件替换为新版本。