【问题标题】:Find string in specific files python在特定文件python中查找字符串
【发布时间】:2016-03-28 16:00:03
【问题描述】:

我正在尝试在很多文件中查找特定字符串。例如,我正在查找目录和子目录中包含字符串“hello”的文件。

假设我的目录系统如下所示:Dir1 中的 File1 和 File3 包含字符串“hello”,而 File2 不包含。在 Dir2 File1 中包含字符串“hello”。

MainDir:
 -> Dir1
    -> SubDir1
       ->File1
       ->File2
    -> SubDir2
       ->File3
 -> Dir2 
    ->SubDir1
      ->File1
      ->SubDir1.1
        ->SubDir1.1.1
          -> File1
          -> File2

我的代码:

 path = "C:\MainDir" #I also get error if I write C:\MainDir\Dir2\SubDir1
 word = "hello"
 for root, dirs, files in os.walk(path):
    for name in files:
        if name.endswith(".txt"):
            with open(os.path.join(path, name)) as fle:
                my_files_content = fle.read()
            if word in my_files_content:
                print fle.name

如果我写完整路径 if 会找到包含字符串“hello”的文件(例如:path = "C:\MainDir\SubDir1" or C:\MainDir\Dir2\SubDir1.1\SubDir1.1) 但如果我只写我的代码中的路径,它会给我一个错误 “否这样的文件或目录:"

【问题讨论】:

  • 不确定您是否直接复制并粘贴了您的代码,但您的路径名中缺少结束 "
  • 怀疑你直接写了"c:\foo\bar.txt"之类的东西,并将\f\b解释为转义序列。您可以复制反斜杠 ("c:\\foo\\bar.txt") 或使用原始字符串 (r"c:\foo\bar.txt") 来避免这种情况。
  • 我不认为这是问题所在。代码无法进入子目录并在其中查找文件。

标签: python


【解决方案1】:

问题是path是你设置的变量,所以它不会在子目录中添加路径。因此,您应该使用 open(os.path.join(root, name)) 而不是 open(os.path.join(path, name))

【讨论】:

  • 哦,我明白了……做得很好
【解决方案2】:

我修复了您的代码并在我的系统中测试良好:

    import os
    paths = r"C:\MainDir" #I also get error if I write C:\MainDir\Dir2\SubDir1
    word = "hello"
    for root, dirs, files in os.walk(paths):
        for name in files:
            if name.lower().endswith(".txt"):
                with open(os.path.join(root, name)) as fle:
                    my_files_content = fle.read()
                    if word in my_files_content:
                        print fle.name

你加入了错误的路径,这里是教程链接os.walk

【讨论】:

    【解决方案3】:

    问题是你会遇到很多不同类型的文件,而 python 不能随便打开任何文件,因为它需要管理员一半,或者像回收站一样无法访问,所以问题是你需要限制文件,所以你只打开'.txt'文件吗?当然,我有一个可以进行大量搜索的代码,并列出我目录中的所有项目,(在我想找到的恶意软件的情况下使用它)但我从来没有打开一堆不同类型的文件...

    所以我现在已经编辑了我的代码来搜索任何人的电脑下载,你所要做的就是准确复制这段代码并运行它,它应该打印你下载的所有目录(如果你运行的是 Windows )。

    import os
    folder_path = (os.path.expanduser('~\\Downloads'))
    for file_object in os.listdir(folder_path):
        file_object_path = os.path.join(folder_path, file_object)
        if os.path.isfile(file_object_path):
            print (file_object_path)
        else:
            print (file_object_path)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2021-11-05
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多