2017-04-26 85 views
0

谁能请告诉我如何执行在Python下面合并...如何比较和合并不同列号的文本文件?

文本文件#1:

5  apple 
1  banana 
3  pear 
4  kiwi 

(加上几千多个条目)

我的文本文件#2看起来像

apple 
orange  
strawberry 
banana 

我想结合这两个文本文件,使我只添加那些在两者,但也保留原来的数字f从文本文件#1链接到相应的标识符。因此,在这个例子中,我的合并应该是这样的:

5  apple 
1  banana 
+2

欢迎来到SO!鼓励您参加[SO旅游](http://stackoverflow.com/tour),您可以在这里了解本网站的用途。它不是要求某人免费编写代码。你有没有试图用Python来尝试读取你的文件并将它们表示为可以对它们执行列表操作的列表?如果是这样,如果您发布迄今已完成的工作,您将获得更多帮助。祝你好运。 –

+0

试试这个http://stackoverflow.com/questions/3925614/how-do-you-read-a-file-into-a-list-in-python和这个http://stackoverflow.com/questions/1388818/我怎么能比较两个列表中的蟒蛇和返回匹配 – brennan

回答

1

这是一个可行的方法:

编辑:以议论考虑

我会先看你的文本文件#1成一个Python字典

d = dict() 
with open("file1.txt") as f: 
    for line in f: 
     (val, key) = line.split() 
     d[key] = int(val) 

print d 

Out: {'kiwi': 4, 1: 'banana', 3: 'pear', 4: 'kiwi', 5: 'apple', 'pear': 3, 'banana': 1, 'apple': 5} 

现在,我们读文件2作为Python列表

with open("file2.txt") as f: 
    l = f.read().splitlines() 

print l 
Out: ['apple', 'orange', 'strawberry', 'banana'] 

现在,创建另一个字典,所需的输出:

d2 = {key:val for key,val in d.iteritems() if key in l} 
print d2 
Out: {'apple': 5, 'banana': 1} 

我把它留给你找出如何写一本字典到一个文本文件中。我会使用熊猫将其转换为数据框并将数据框写为csv或tsv。这是一种解决方法,必须有一种更直接的方式来做到这一点。

+1

正确的想法,可怕的执行。 'd'应该有水果作为关键,而不是价值观。另外,'l2'是未定义的。 – alexis

0

我很抱歉没有提供我以前的尝试信息(我没有试图要求免费代码,只是被卡住,需要一些指导)。

基本上我有一个带有700,000字的段落形式的txt文档,我想把这些词汇交叉引用到另一个列表形式的文档中。我能走到今天

fname = raw_input("Enter file name: ") 
fh = open(fname) 
inp = fh.read().upper() 
new_fh2 = inp.replace('.','').replace(',','').replace('?','') 
new_fh3 = new_fh2.replace('-','').replace('_','').replace(';','') 
new_fh4 = new_fh3.replace(':','').replace('!','').replace('(','') 
new_fh5 = new_fh4.replace(')','').replace('/','') 
new_fh6 = new_fh5.replace('|','').replace('&','').replace('[','') 
new_fh7 = new_fh6.replace(']','').replace('%','').replace('+','') 
new_fh8 = new_fh7.replace('*','').replace('@','').replace('=','') 
new_fh9 = new_fh8.replace('>','').replace('<','') 
new_fh10 = new_fh9.replace('{','').replace('}','').replace('~','') 
new_fh11 = new_fh10.replace('"','').split() 
new_fh12 = sorted(set(new_fh11)) 
for word in new_fh12: 
    print new_fh11.count(word), word` 

在这一点上,我准备用LibreOffice的基地使用2台做我的比较,但即使是按单词减少计数功能从700K数到34K,进入数据坠毁程序,只要我尝试上传。所以我不得不试着想一个代码,它可以让我比较python中的两个txt文件,它很好地处理了这个数据量。我真的不知道从哪里开始,尽管我知道一些合并函数,但我不知道如何定义合并。最后我做这个,而不是

new_fh12 = new_fh11.split() 
new_fh12.sort() 
for x in sorted(new_fh12): 
    print x 

然后我把这个列表,并把它到Excel中的一列,加了我第二个列表另一列,然后使用COUNTIF函数计算和两个列表进行比较。