【发布时间】:2014-03-05 10:15:46
【问题描述】:
我正在运行 Python 2.7。
我有三个文本文件:data.txt、find.txt 和 replace.txt。现在,find.txt 包含我想在data.txt 中搜索的几行,并将该部分替换为replace.txt 中的内容。这是一个简单的例子:
data.txt
pumpkin
apple
banana
cherry
himalaya
skeleton
apple
banana
cherry
watermelon
fruit
find.txt
apple
banana
cherry
replace.txt
1
2
3
因此,在上面的示例中,我想在数据中搜索所有出现的apple、banana 和cherry,并将这些行替换为1,2,3。
由于我的data.txt 大约为 1MB,所以我在正确的方法上遇到了一些麻烦,所以我希望尽可能高效。一种愚蠢的方法是将所有内容连接成一个长字符串并使用replace,然后输出到一个新的文本文件,以便恢复所有换行符。
import re
data = open("data.txt", 'r')
find = open("find.txt", 'r')
replace = open("replace.txt", 'r')
data_str = ""
find_str = ""
replace_str = ""
for line in data: # concatenate it into one long string
data_str += line
for line in find: # concatenate it into one long string
find_str += line
for line in replace:
replace_str += line
new_data = data_str.replace(find, replace)
new_file = open("new_data.txt", "w")
new_file.write(new_data)
但是对于像我这样的大型数据文件来说,这似乎太复杂且效率低下。此外,replace 函数似乎已被弃用,因此不太好。
另一种方法是逐行遍历并跟踪您找到匹配的行。
类似这样的:
location = 0
LOOP1:
for find_line in find:
for i, data_line in enumerate(data).startingAtLine(location):
if find_line == data_line:
location = i # found possibility
for idx in range(NUMBER_LINES_IN_FIND):
if find_line[idx] != data_line[idx+location] # compare line by line
#if the subsequent lines don't match, then go back and search again
goto LOOP1
我知道,代码不完整。我什至不知道是否可以从某行上或某些行之间的某行搜索文件,但同样,我对这一切的逻辑有点困惑。做这个的最好方式是什么?
谢谢!
【问题讨论】:
标签: python string file replace