Выполнять команды для всех файлов в каталоге

Chuck Slayton спросил: 12 мая 2018 в 04:05 в: python-3.x

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

with open("text.txt", "r") as infile:
        for line in infile:
            if re.search(r"\b1000\b", line, flags=re.IGNORECASE):
                count1 += 1

Вот моя неудачная попытка заставить его работать на нескольких файлах.

path = 'c:/mypath/'
for filename in os.listdir(path):
    open(filename, "r")
    for line in filename:
        if re.search(r"\b1000\b", line, flags=re.IGNORECASE):
            count1 += 1
            print(count1)

1 ответ

Есть решение
Jean-François Fabre ответил: 12 мая 2018 в 04:12

несколько проблем в вашей попытке.

  • open должен быть назначен дескриптору файла, вы этого не делаете
  • filename - это имя файла . Вам нужно присоединиться к пути, чтобы открыть полный файл, чтобы открыть

, например:

path = r'c:\mypath'for filename in os.listdir(path):
    with open(os.path.join(path,filename), "r") as infile:
        for line in infile:
           if re.search(r"\b1000\b", line, flags=re.IGNORECASE):
              count1 += 1

или лучше с внутренним пониманием и

for filename in os.listdir(path):
    with open(os.path.join(path,filename), "r") as infile:
        count1 += sum(1 for line in infile if re.search(r"\b1000\b", line, flags=re.IGNORECASE))

или вариант (но некоторым это не нравится):

        count1 += sum(bool(re.search(r"\b1000\b", line, flags=re.IGNORECASE)) for line in infile)