Чтение из двух файлов CSV - PullRequest
1 голос
/ 14 июля 2020

Мой код:

import csv

with open("firstfile.csv", encoding='utf-8-sig') as file1:
    one = csv.DictReader(file1)
    with open("secondfile.csv", "r") as file2:
        for line in one:
            print(line)
            for line2 in file2:
                s = line["Owner"]
                if s in line2:
                    print(True)
                    break
            print(s)

Когда я запускаю этот код, я получаю

{'File Name': 'hofie.exe', 'Owner': 'hello'}
hello
{'File Name': 'feiofejp.zip', 'Owner': 'yo'}
hello
{'File Name': 'fewfew1.exe', 'Owner': 'foooffoo'}
hello

, когда я ожидаю:

{'File Name': 'hofie.exe', 'Owner': 'hello'}
hello
{'File Name': 'feiofejp.zip', 'Owner': 'yo'}
yo
{'File Name': 'fewfew1.exe', 'Owner': 'foooffoo'}
foooffoo

firstfile.csv:

File Name,Owner
hofie.exe,hello
feiofejp.zip,yo
fewfew1.exe,foooffoo

secondfile.csv:

ihfoiehofiejwifpewhf

В чем проблема?

1 Ответ

0 голосов
/ 15 июля 2020

Как правильно сказал @ mkrieger1, вы исчерпали файл и не можете прочитать его снова. Хороший и изящный способ автоматического возврата в начало - использовать for else l oop, где else проверяет, достигли ли вы значения eof. После этого вы можете снова file.seek(0) в начале.

import csv

with open("firstfile.csv", encoding='utf-8-sig') as file1:
    one = csv.DictReader(file1)
    with open("secondfile.csv", "r") as file2:
        for line in one:
            print(line)
            for line2 in file2:
                s = line["Owner"]
                if s in line2:
                    print(True)
                    break
            else:
                file2.seek(0)
            print(s)

печатает :

OrderedDict([('File Name', 'hofie.exe'), ('Owner', 'hello')])
hello
OrderedDict([('File Name', 'feiofejp.zip'), ('Owner', 'yo')])
yo
OrderedDict([('File Name', 'fewfew1.exe'), ('Owner', 'foooffoo')])
foooffoo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...