0

对不起,如果标题有点混乱。我有两个文件,file1 和 file2 都有很多列。我需要在某个列中找到公共元素,如果它们匹配,则应该将 file1 中的整行添加到 file2 中的匹配行中:

例如:

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 中的匹配行,请帮助!

4

1 回答 1

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

于 2013-07-09T18:26:34.590 回答