首页 > 解决方案 > 对目录中的所有文件运行命令

问题描述

请参阅下面的示例脚本。我需要在一个目录中的多个文本文件上运行它。我知道这是可能的,但我似乎无法正确使用语法。我相信我需要将以下内容作为一个进程运行?

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)

标签: python-3.x

解决方案


您尝试中的几个问题。

  • 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

或更好的内在理解和sum

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)

推荐阅读