我试图打开一个文本文件,阅读它,然后使用正则表达式功能查找要编辑的行,然后修改我的文本文件。但是,发生的事情是,在找到这些行并对其进行编辑之后,我无法再次在文本文件中写入修改后的内容。
remove_commas = re.compile("House")
answer = {}
global line1
with open("\DEMO_houses.txt", "r") as inp:
for line in inp:
if remove_commas.match(line):
line1 = line.replace(',', '')
print line1
with open("DEMO_houses.txt", "w") as document1:
document1.write(line1)
发生的事情是,它只是删除了我的文本文件,只写了修改后的第一行。
文本文件是这样的:
Street : Blue, Red
House: Big, enough
Garden : green, not green
在新的文本文件中,我需要以下内容:
Street : Blue, Red
House: Big enough
Garden : green, not green
如果有人可以帮助我,我将非常感激。谢谢
答案 0 :(得分:1)
您可以尝试以下操作,目前的问题是,您仅存储和写入修改后的行的最后一次出现,而是最好在内存中创建修改后的文件的副本然后写出(请参见下文) )
remove_commas = re.compile("House")
answer = {}
with open("\DEMO_houses.txt", "r") as inp:
new_file_lines = []
for line in inp:
if remove_commas.match(line):
line = line.replace(',', '')
new_file_lines.append(line)
with open("DEMO_houses.txt", "w") as document1:
document1.writelines(new_file_lines)
答案 1 :(得分:1)
现在代码中发生的事情是,您首先读取with open("\DEMO_houses.txt", "r") as inp:
块中的所有行,然后在with open("DEMO_houses.txt", "w") as document1:
块中,代码仅写回最后读取的行。由于写入模式"w"
会擦除先前的文件,因此代码执行完后,仅保留原始文件的最后一行。
您最好先将所有行读入内存,然后对这些行进行md处理,然后再将它们写回到同一文件中,如下所示:
import re
remove_commas = re.compile("House")
data = []
with open("DEMO_houses.txt", "r") as inp: #Read phase
data = inp.readlines() #Reads all lines into data at the same time
for index, item in enumerate(data): #Modify phase, modification happens at once in memory
if remove_commas.match(item):
data[index] = item.replace(',', '')
with open("DEMO_houses.txt", "w") as document1: #write back phase
document1.writelines(data)
提供的文件可以毫无问题地存储在内存中,这是一次更好的方法,一次可以读取和修改一行文件,因为内存中的修改要快得多,而二级存储中的文件只需要修改一次