【问题标题】:Python Text Searching in .txt files in different folders with printing the name of file and folderPython文本在不同文件夹中的.txt文件中搜索并打印文件和文件夹的名称
【发布时间】:2018-07-15 21:37:39
【问题描述】:

我正在用 Python 编写一个脚本,用于在选定文件夹中的一堆 .txt 文件中搜索选定的术语(单词/单词、句子),并打印出包含选定项的 .txt 文件的名称学期。目前使用os 模块工作得很好:

import os

dirname = '/Users/User/Documents/test/reports'

search_terms = ['Pressure']
search_terms = [x.lower() for x in search_terms]

for f in os.listdir(dirname):
    with open(os.path.join(dirname,f), "r", encoding="latin-1") as infile:
        text =  infile.read()

    if all(term in text for term in search_terms):
        print (f)

但我想为脚本制作扩展名:不仅可以在一个文件夹(目录名)中搜索,还可以在两个(例如,目录名1,目录名2)中搜索,其中也包含 .txt 文件。此外,我不仅想打印搜索到的报告的名称,还想打印它所在目录的名称(dirname)。是否可以使用os 模块来做到这一点,或者会有其他一些方法来做到这一点?

【问题讨论】:

  • 把它们放在同一个目录下并做一个os.walk()
  • walk() 方法仅通过自上而下或自下而上遍历目录树来生成目录树中的文件名。

标签: python file path directory python-os


【解决方案1】:

您可以像这样遍历目录名:

import os

dirnames = ['/Users/User/Documents/test/reports','/Users/User/Documents/test/reports2']

search_terms = ['Pressure']
search_terms = [x.lower() for x in search_terms]
for dir_name in dirnames:
    for f in os.listdir(dir_name):
        with open(os.path.join(dir_name, f), "r", encoding="latin-1") as infile:
            text = infile.read()

        if all(term in text for term in search_terms):
            print("{} in {} directory".format(f, dir_name))

【讨论】:

  • 这个脚本似乎只显示了第一个文件,其中包含来自每个文件夹的信息,而不是所有文件
  • @HalfPintBoy 是否可能只有第一个文件符合条件?
  • 例如,当我将所有文件放在一个具有相同搜索词的文件夹中时,我检查了它,它给了我 10 个匹配项,当我在两个不同的文件夹(相同文件)中执行它时,结果只有一个从每个文件夹匹配。
猜你喜欢
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
相关资源
最近更新 更多