gpt4 book ai didi

python - 循环遍历 Python 中的文件夹和包含字符串的文件

转载 作者:太空狗 更新时间:2023-10-30 00:44:17 25 4
gpt4 key购买 nike

我是 python 的新手。我需要遍历给定目录的子目录并返回包含特定字符串的所有文件。

for root, dirs, files in os.walk(path):
for name in files:
if name.endswith((".sql")):
if 'gen_dts' in open(name).read():
print name

这是我得到的最接近的。

我得到的语法错误是

Traceback (most recent call last):
File "<pyshell#77>", line 4, in <module>
if 'gen_dts' in open(name).read():
IOError: [Errno 2] No such file or directory: 'dq_offer_desc_bad_pkey_vw.sql'

“dq_offer_desc_bad_pkey_vw.sql”文件中不包含“gen_dts”。

在此先感谢您的帮助。

最佳答案

您收到该错误是因为您试图打开 name,它只是文件的 name,而不是完整的相对路径。您需要做的是 open(os.path.join(root, name), 'r')(我添加了模式,因为这是一个很好的做法)。

for root, dirs, files in os.walk(path):
for name in files:
if name.endswith('.sql'):
filepath = os.path.join(root, name)
if 'gen_dts' in open(filepath, 'r').read():
print filepath

os.walk() 返回一个生成器,它为您提供元组,例如 (root, dirs, files),其中 root 是当前的directory,dirsfiles 分别是根目录中的目录和文件的名称。请注意,它们是名称,而不是路径;或者更准确地说,它们是该目录/文件相对于当前根目录的相对 路径,这是表达同一事物的另一种方式。另一种思考方式是 dirsfiles 中的目录和文件永远不会有斜杠。

最后一点;根目录路径始终以您传递给 os.walk() 的路径开头,无论它是否相对于您当前的工作目录。因此,对于 os.walk('three'),第一个元组中的 root 将是 'three'(对于 os .walk('three/'),它将是 'three/')。对于 os.walk('../two/three'),它将是 '../two/three'。对于 os.walk('/one/two/three/'),它将是 '/one/two/three/';第二个可能是 '/one/two/three/four'

关于python - 循环遍历 Python 中的文件夹和包含字符串的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com