0

タイトルがややこしくてすみません。file1 と file2 の 2 つのファイルがあり、両方とも多くの列があります。特定の列で共通の要素を見つける必要があります。それらが一致する場合、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()

「バリアント」には 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]']ます。

2 番目のループは、各行の検索条件を満たすすべてのエントリを出力します。file2.txt

于 2013-07-09T18:26:34.590 に答える