Функция только печатает значение для четырех файлов из каталога 5K файлов, Python - PullRequest
1 голос
/ 07 апреля 2019

Я выполняю код, который берет каждую строку CSV и находит точное соответствие сущности внутри каждого файла каталога.Проблема здесь в том, что код завершается после распечатки совпадающих значений для четырех файлов, тогда как в каталоге есть файлы по 5 КБ.Я думаю, что проблема с моим перерывом или продолжением заявления.Может кто-нибудь, пожалуйста, помогите мне с этим.Код до сих пор:

import csv
import os
import re


path = 'C:\\Users\\Lenovo\\.spyder-py3\\5KFILES\\'

with open('C:\\Users\\Lenovo\\.spyder-py3\\codes_file.csv', newline='', encoding ='utf-8') as myFile:
    reader = csv.reader(myFile)
    for filenames in os.listdir(path):
        with open(os.path.join(path, filenames), encoding = 'utf-8') as my:
            content = my.read().lower()
            #print(content)
            for row in reader:
                if len(row[1])>=4:

                #v = re.search(r'(?<!\w){}(?!\w)'.format(re.escape(row[1])), content, re.I)
                    v = re.search(r'\b' + re.escape(row[1]) + r'\b', content, re.IGNORECASE)
                    if v: 
                        print(filenames,v.group(0))
                        break

1 Ответ

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

reader создается перед вашим for циклом и является итератором. Каждый раз, когда вы достигаете линии for, итерация будет продолжаться там, где она остановилась. Как только вы достигнете конца reader, следующие for петли будут пустыми.

Вы можете увидеть, что происходит в этом коротком примере:

l = [0, 1, 2, 3, 4, 5]
iterator = iter(l)

for i in range(0, 16, 2):
    print('i:', i, "- starting the 'for j ...' loop")
    for j in iterator:
        print('iterator:', j)
        if j == i:
            break

i: 0 - starting the 'for j ...' loop
iterator: 0
i: 2 - starting the 'for j ...' loop
iterator: 1
iterator: 2
i: 4 - starting the 'for j ...' loop
iterator: 3
iterator: 4
i: 6 starting the 'for j ...' loop
iterator: 5
i: 8 starting the 'for j ...' loop
i: 10 starting the 'for j ...' loop
i: 12 starting the 'for j ...' loop
i: 14 starting the 'for j ...' loop

Каждый раз, когда выполняется цикл for, он продолжает выполнять итерацию на iterator, где он остановился ранее. Как только итератор исчерпан, циклы for j... пусты.

Вы должны перезапустить его в каждом цикле:

for row in csv.reader(myFile):
    ....

или составить список:

reader = list(csv.reader(myFile))

....

for row in reader:
    ....
...