Python: Почему выход из цикла выполняется после первой итерации? - PullRequest
1 голос
/ 08 апреля 2019

Что я пытаюсь сделать: Я импортирую из csv и пытаюсь перебрать данные, чтобы проверить совпадения.

Что я пробовал: Я пытаюсь использовать вложенный цикл для итерации по большому списку и проверки каждого элемента в меньшем списке.

FYI "Название пестицида" - это заголовок столбца в файле d_reader, поэтому это имя ключа.

agqfile=open("GCLC-USA-1.csv")
csv_a=csv.reader(agqfile)

d_reader=csv.DictReader(open("Pesticide_output.csv"))

 for row in d_reader:
#     print (row['Pesticide Name'])
    for chem in csv_a:
        print(chem[0],row['Pesticide Name'])
        if chem[0] in row['Pesticide Name']:
             print(chem[0],"found in ",row['Pesticide Name'])
 #     print(row['Pesticide Name'])

Что я ожидаю: Внешний цикл не должен выходить до тех пор, пока он не будет завершен, но он завершается после первой итерации. Однако, если я помещаю оператор print перед вторым (вложенным) циклом for, он печатает каждую итерацию.

Я не понимаю этого поведения! Пожалуйста, вы можете помочь мне, объяснив это?

Я пытался сделать этот вопрос как можно более кратким, но если вам нужна дополнительная информация, такая как образец данных или распечатка типов данных, тогда я могу предоставить это.

1 Ответ

2 голосов
/ 08 апреля 2019

Внутренний цикл исчерпывает файл-объект csv_a в первой внешней итерации, поэтому другие внешние строки никогда не входят во внутренний цикл. Вы должны хранить содержимое в списке:

agqfile=open("GCLC-USA-1.csv")
csv_a = list(csv.reader(agqfile))

d_reader=csv.DictReader(open("Pesticide_output.csv"))

for row in d_reader:
#     print (row['Pesticide Name'])
    for chem in csv_a:
        print(chem[0],row['Pesticide Name'])
        if chem[0] in row['Pesticide Name']:
             print(chem[0],"found in ",row['Pesticide Name'])
 #     print(row['Pesticide Name'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...