0

同じようにフォーマットされた 2 つの csv ファイルがあります (2 列のデータ):

    Name        Link
    Name        Link
    Name        Link
    Name        Link

それらの唯一の違いは、これら 2 つの列内のデータです (名前とリンクが異なります)。両方の csv ファイルに表示される名前とリンクを見つけて、新しい csv ファイルに書き込みたいと思います。これまでのところ、私は試しました:

    import csv

    f1 = file('/path/to/f1.csv', 'r')
    f2 = file('/path/to/f2.csv', 'r')
    f3 = file('/path/to/f3.csv', 'w')

    c1 = csv.reader(f1)
    c2 = csv.reader(f2)
    c3 = csv.writer(f3)

    masterlist = [row for row in c2]

    for hosts_row in c1:
        row = 1
        found = False
        for master_row in masterlist:
            results_row = hosts_row
            if hosts_row[3] == master_row[1]:
                results_row.append('FOUND in master list (row ' + str(row) + ')')
                found = True
                break
            row = row + 1
        if not found:
            results_row.append('NOT FOUND in master list')
        c3.writerow(results_row)

    f1.close()
    f2.close()
    f3.close()

これは同様の質問への回答に基づいていますが、その場合の csv ファイルの形式が異なることを認識しています。そして、私はこのエラーを受け取ります:

         masterlist = [row for row in c2]
    _csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

csv ファイルの形式に合わせて上記のコードを調整するにはどうすればよいですか。または、これを行うより良い方法はありますか?私はPythonを使い始めたばかりで、2つのファイルのデータを比較するという概念をまだ完全に理解していないと思うので、どんな助けでも大歓迎です。

4

3 に答える 3

1
l1 = set(open('f1.csv'))
l2 = set(open('f2.csv'))
open('f3.csv', 'wb').writelines(l1 & l2)

l1l2は、それぞれ f1.csv と f2.csv の行のセットです。両方のファイルで見つかった行である設定された交差点l1 & l2に評価され、それらを f3.csv に出力します。

于 2013-04-05T20:41:16.833 に答える