Если оператор внутри вложенных циклов for вычисляется только один раз - python - PullRequest
0 голосов
/ 22 марта 2012

Я пишу код, который сравнивает файл1 (один столбец записей) с файлом 2 (3 столбца записей) и извлекает сопоставленные записи из файла 2 на основе первого столбца. Проблема в том, что он оценивает цикл только один раз.

File1:

ABC

DEF

JKL

File2:

IJK,123,SDF

ABC,456,HJK

QWE,876,GFT

JKL,098,HGF

.....

Мой код:

for entry in fh_file1:
    mir = entry.strip('\n')
    print(mir)
    for row in fh_file2:
        row_splt = row.split(',')             
        print(row_splt[0])
        if mir in row_splt[0]:
            print (row.strip('\n'))
        else:
            pass

Результат от этого кода:

соответствует первой записи файла 1:

ABC 456 HJK

Пожалуйста, помогите мне в этом.

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Файлы - это потоки данных. Когда вы зацикливаетесь на них, вы читаете их по очереди. В конце внутреннего цикла этот файл достиг конца. Он не запустится снова в начале следующей итерации внешнего цикла, поскольку файлы работают не так.

Обычно вы должны сначала прочитать файл в память: list(fh_file1) даст вам list строк, которые вы можете зациклить столько раз, сколько захотите.

3 голосов
/ 22 марта 2012

Вам нужно добавить fh_file2.seek(0) перед вторым циклом for, чтобы начать сначала в начале файла.

Вы бы лучше обслужились, прочитав его в память один раз:

file2_lines = fh.file2.readlines()

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

...