2013-07-09 166 views
0

對不起,如果標題有點混亂。我有兩個文件,file1和file2都有很多列。我需要找到共同的要素中某列的,如果他們匹配,從文件1的整條生產線應該被添加到匹配的行文件2:將兩個列表中的地圖元素添加到另一個列表中

如:

file1.txt: 
[a,b,c], 
[x,e,y], 
... 

file2.txt: 
[d,e,f], 
[s,p,z], 
... 

注意,這裏只是元素「 E」相匹配,結果應該(在一個新的文件,但所有的FILE2.TXT信息)是:

newfile.txt: 
[d,e,f],[x,e,y], 
[s,p,z] 

...

我的想法:

output = open('file2.txt', 'w') 
for f in variants: 
    add = "" 
    if f[0] in sources: 
     add = ??? 
    output.write("\t".join(f) + add + "\n") 
output.close() 

「variants」包含來自file1.txt的列表,我真的不知道如何將其餘信息從file1.txt添加到file2.txt中的匹配行,請任何幫助!

+0

各行的所有條目爲什麼不使用只是簡單的文字'A,B,C',而不是'[A,B,C]'? –

回答

0
from collections import defaultdict 

def parse_data(line): 
    # Returns a list of values from line of text. 
    return line[1:-2].split(',') 

with open('newfile.txt', 'wb') as new_file, open('file1.txt', 'rb') as f1, open('file2.txt', 'rb') as f2: 
    mapping = defaultdict(list) 
    # Zero-based indexing. 
    CERTAIN_COLUMN = 1 
    for line in f1: 
     # Remove new-lines and get comma-separated values. 
     line = line.strip() 
     columns = parse_data(line) 
     mapping[columns[CERTAIN_COLUMN]].append(line) 

    for line in f2: 
     line = line.strip() 
     columns = parse_data(line) 
     for matched in mapping[columns[CERTAIN_COLUMN]]: 
      new_file.write('{},{},\n'.format(matched, line)) 

第一回路填充字典與search_criteria - >matched rows映射,即e - >['[x,e,y]']

第二個循環打印符合搜索條件的file2.txt

相關問題