Python 如何在一个文本文件中查找X行并将其替换为另一个文本文件中的Y行?

Python 如何在一个文本文件中查找X行并将其替换为另一个文本文件中的Y行?,python,string,file,replace,Python,String,File,Replace,我问了这个问题: 但我的问题最终还是不清楚,所以我要求另一个问题更具体一些 我有Python 2.7 我有三个文本文件,data.txt,find.txt和replace.txt data.txt是一个大约1MB的大文件,有几千行。现在,我有一个find.txt文件,其中包含X行,我想在data.txt中查找,并在replace.txt中替换为Y行,X和Y可能是相同的数字,也可能不是 例如: data.txt pumpkin apple banana cherry himalaya skelet

我问了这个问题: 但我的问题最终还是不清楚,所以我要求另一个问题更具体一些

我有Python 2.7

我有三个文本文件,
data.txt
find.txt
replace.txt

data.txt
是一个大约1MB的大文件,有几千行。现在,我有一个
find.txt
文件,其中包含X行,我想在
data.txt
中查找,并在
replace.txt中替换为Y行,X和Y可能是相同的数字,也可能不是

例如:

data.txt

pumpkin
apple
banana
cherry
himalaya
skeleton
apple
banana
cherry
watermelon
fruit
apple
banana
cherry
1
2
3
4
5
find.txt

pumpkin
apple
banana
cherry
himalaya
skeleton
apple
banana
cherry
watermelon
fruit
apple
banana
cherry
1
2
3
4
5
replace.txt

pumpkin
apple
banana
cherry
himalaya
skeleton
apple
banana
cherry
watermelon
fruit
apple
banana
cherry
1
2
3
4
5
因此,在上面的示例中,我想在数据中搜索所有出现的
apple
banana
cherry
,并在其位置插入
1,2,3,4,5

因此,生成的
data.txt
如下所示:

pumpkin
1
2
3
4
5
himalaya
skeleton
1
2
3
4
5
watermelon
fruit
或者,如果
replace.txt
中的行数小于
find.txt

pumpkin
1
2
himalaya
skeleton
1
2
watermelon
fruit
由于我的
data.txt
大约为1MB,因此我在正确的方法上遇到了一些问题,因此我希望尽可能提高效率。一种愚蠢的方法是将所有内容连接成一个长字符串,并使用
replace
,然后输出到一个新的文本文件,以便恢复所有的换行符

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)
但对于像我这样的大型数据文件来说,这似乎是如此复杂和低效

我希望看到的东西的伪代码:

大概是这样的:

(x,y) = find_lines(data.txt, find.txt) # returns line numbers in data.txt that contains find.txt
replace_data_between(x, y, data.txt, replace.txt) # replaces the data between lines x and y with replace.txt

def find_lines(...):
    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

正如你所看到的,我对这一切的逻辑感到困惑。有人能给我指出正确的方向吗?

如果文件足够小,可以在ram中执行此操作

我首先映射查找:替换关系:

find_replace_dict = {find_string:replace_string}
然后我将遍历数据文件

of = open('output_file','wt')
for line in data_file:
    if line in find_replace_dict.keys():
        of.write(find_replace_dict[line])
    else:
        of.write(line)
of.close()

一起浏览
find.txt
replace.txt
,进行查找
dict
。然后浏览
data.txt
,并用查找目录中的值替换每一行(如果有)。您需要在
find
replace.txt
的布局上更加具体,才能获得更具体的帮助。如果没有1:1映射,那么
find
replace
的映射是什么?你能给我们一个python对象而不是文本文件吗?当X和Y不相同时,你希望发生什么?当X>Y和X