2017-02-17 67 views
0

我目前有15000條記錄的文本文件(製表符del)。 我有5000個記錄的另一個文本文件(製表符del)。比較2個文本文件並導出匹配Python

在具有5000條記錄的文件中,有一些行與包含15,000條記錄的文件相匹配。這些可通過名爲URN(唯一記錄號)的列標題進行標識。例如我可能需要從主文件中取出URN 62294,但我不知道我必須拿出那一個出來,直到我比較這兩個文件並且看到它在兩者中。

這在python中有多難?

回答

0

是不是很難?不,你可以很容易地做到這一點

file1 = open("file1.txt","r") 
results = [] 

for line in file1: 
    file2 = open("file2.txt","r") 
    for l in file2: 
     if (l.split("\t")[0] == line.split("\t")[0]): 
      results.append(l.split("\t")[0]) 
      break 
    file2.close() 
file1.close() 

for i in results: 
    print(i) 

現在,這是最好的方法嗎?可能不適合大文件。 (帶我74秒的文件)。

+0

等待OP分享了這些文件? –

+0

不,不,但我生成了10列和15000和5000行分別爲幾個文件。 – Pol

0

您可以查看Pandas庫。它將允許您將這兩個表作爲數據框加載,並以類似於sql的樣式將它們連接到所需的列上。使用文檔應該相當容易。

+0

謝謝你生病看看那 – mbf94

1

嘗試安裝熊貓與pip install pandas

然後運行這個命令:

import pandas as pd 

filename1 = #main file 
filename2 = #the other file 
main = pd.read_csv(filename1,sep='\t') # sep='\t' is for tab delimited file 
side = pd.read_csv(filename2,sep='\t') 
main['URN'] = main['URN'].astype(int) 
side['URN'] = side['URN'].astype(int) 
merge = pd.merge(main,side,on='URN',how='inner') #how=inner means the URN value is in both 2 files 
#merge = merge[merge['URN'] != 62294] 
print (merge) 
merge.to_excel('Output.xlsx,index=False) 
+0

事情是,我不知道我在找什麼URN。但如果URN是在兩個然後我需要它輸出到一個新的文本文件 – mbf94

+0

我已經更新了代碼,在兩個文件中輸出URN值的行。 'how ='inner''是內連接選項。 –

+0

這會輸出一個.xlsx文件,只有 – mbf94