我试图在很多文件中找到特定的字符串。例如,我正在寻找在目录和子目录中包含字符串“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
如果我写完整路径,如果找到包含字符串“hello”的文件(例如:path = "C:\MainDir\SubDir1" or C:\MainDir\Dir2\SubDir1.1\SubDir1.1)
但是如果我只在我的代码中编写路径它会给我一个错误 “没有这样的文件或目录:”
答案 0 :(得分:1)
问题是path
是您设置的变量,因此它不会在子目录中添加到路径中。因此,您应该open(os.path.join(path, name))
而不是open(os.path.join(root, name))
。
答案 1 :(得分:1)
我修复了你的代码并在我的系统中测试好了:
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。
答案 2 :(得分:-3)
与此相关的是你会遇到很多不同类型的文件,并且python不能打开任何文件,因为它需要管理员一半,或者像它无法像回收站一样获得访问权限,所以问题是你需要限制文件,所以你只打开'.txt'文件?当然我有一个代码,可以做一个巨大的搜索,并列出我的目录中的所有项目,(在我想找到的恶意软件的情况下使用这个)但我从来没有打开一堆不同类型的文件...
所以我现在已经编辑了我的代码来搜索任何人的个人电脑下载,所有你要做的就是完全复制这个代码并运行它,它应该打印下载的所有目录(如果你运行一个窗口虽然)。
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)