2014-02-26 72 views
0

有超过1000条文件1,例如:比较两个文件,并替换

:) 
still good 
not 
candy....wasn't even the good stuff. 
how could i ever forget? #biggestdayoftheyear 
not even think 
will be 

有超过1000行file2中,例如:

1,even,2 
2,be,1 
3,good,2 
4,:),1 
5,forget?,1 
6,i,1 
7,stuff.,1 
8,#biggestdayoftheyear,1 
9,think,1 
10,will,1 
11,how,1 
12,not,2 
13,the,1 
14,still,1 
15,ever,1 
16,could,1 
17,candy....wasn't,1 

代码:

file1 = 'C:/Users/Desktop/file1.txt' 
file2 = 'C:/Users/Desktop/file2.txt' 

with open(file1) as f1: 
    for line1 in f1: 
     sline1 = str(line1.strip().split(' ')) 
     print sline1 

with open(file2) as f2: 
    for line2 in f2: 
     sline2 = line2.split(',') 
     #print sline2[0], sline2[1] 
     if sline2[1] in sline1: 
      print sline1.replace(sline1, sline2[0]) 

从代码结果只显示:

2 
6 
10 

我错过了什么?任何建议?

我想从file2的第1列中的数字替换file1中的所有单词,从第2列检查它们是否是相同的单词。

预期的结果:

4 
14 3 
12 
17 1 13 3 7 
1 16 6 15 5 8 
12 1 9 
10 2 
+0

你的问题是什么?是不是像你期望的那样工作? –

+0

对不起,我忘了提及。 – ThanaDaray

+0

两个文件中的行是否以特定顺序排列?必须将文件1中的第一行与文件2中的第一行进行比较,还是必须对文件1中的每一行循环遍历文件2中的所有行?如果你确实找到了一场比赛,你需要突围还是继续寻找更多的比赛? – sabbahillel

回答

1

你将需要建立从文件2的inverted index

inverted_index = {} 
with open(file2) as f2: 
    for line in f2: 
     key, value, _ = line.split(',') 
     inverted_index[value] = key 

然后,使用该倒排索引,通过文件1检查,而你循环:

with open(file1) as f1: 
    for line in f1: 
     print ' '.join([inverted_index.get(word, word) for word in line.strip().split(' ')]) 
0

我注意到,你遍历文件1,并设置sline1明确。在退出循环后,循环遍历文件2进行比较。因此,您只会处理sline1的最后一个值(因为您已退出该循环)。一旦你建立了如Menno所示的词典倒排索引,你就可以设置替换过程。