标题可能不会对任何人都有正义,所以让我顺利一点。
我正在尝试编写一个程序,该程序将扫描我的驱动器E:\
以获取water
,fire
和air
等字词列表。在我的E:\
驱动器中,我显然文件夹中的文件夹和文件夹中的文件,依此类推。
我想调用函数search (path, text)
,它在文本中可以输入列表['water', 'fire', 'air']
。所以它看起来像这样:search('E:\\', ['water', 'fire', 'air'])
。
我希望能够扫描目录,并使用每个'行'它扫描,打印Scanning: E:\\...
。我有这个。当它找到水,火和/或空气时,我也想要输出In (directory name) found water, fire
; In (directory name) found air
等我完成了这一部分。我无法弄清楚如何让它显示多个单词(如果适用)。
我正在寻找的输出将是这样的,例如:
Scanning: E:\
Scanning: E:\Python Fun!
Scanning: E:\Python Fun!\1st Week
Scanning: E:\Python Fun!\2nd Week
Scanning: E:\Python Fun!\3rd Week
In E:\Python Fun!\3rd Week\elements.txt found 'fire', 'water'
Scanning: E:\Python Fun!\4th Week
Scanning: E:\Python Fun!\5th Week
In E:\Python Fun!\5th Week\elements.txt found 'air
Scanning...
等等
这是我的代码:
import os
def search(path, text):
for text in texts:
if os.path.isfile(path): #base case
if text in path:
print(path)
return
if not os.path.exists(path):
return
for item in os.listdir(path):
itempath = os.path.join(path, item)
if os.path.isfile(itempath):
if text in item:
print('In {} found {}'.format(itempath, word))
elif os.path.isdir(itempath):
search(itempath, text)
print('Scanning:', path)
#open(itempath).read() #tested this but got an error. See below.
else: #unknown object type
pass
search('E:\\',['water','fire', 'air'])
我收到的Traceback
错误是AttributeError: 'str' object has no attribute 'read'
。所以我评论了它。
使用此代码,我得到的结果基本上是列表中的最后一个字母,在这种情况下,r
作为被搜索的内容。我想这是因为额外的循环?但不确定。
我知道我需要在某个地方添加open filename
,但我又对如何实现它感到困惑。我刚刚开始学习操作系统模块,以便解决大部分混乱问题。我很难过。
答案 0 :(得分:0)
对于递归迭代您的驱动器,请考虑使用glob
代替:
import glob
for filename in glob.iglob('E:/**/**', recursive=True):
print("Scanning", filename);
with open(filname, 'r', encoding='utf-8') as file: content = file.read()
for text in texts:
if text in content:
print("Found:", text, " - ", filename);
为了扫描文件的内容,您还需要open()
个。