Python 一行简短的Os.Walk代码让我失望

Python 一行简短的Os.Walk代码让我失望,python,Python,我只想更改整个目录中的文件名。对于使用os.listdir的单个目录,代码是可靠的,但当我升级到os.walk时,我失败了 import os rootFolder = "C:/Users/.../Desktop/Docs" for folder in os.walk(rootFolder): for filename in folder: os.rename(filename, filename[4:]) 最后一行给了我一个错误,系统找不到指定的路径,有人能帮我吗

我只想更改整个目录中的文件名。对于使用os.listdir的单个目录,代码是可靠的,但当我升级到os.walk时,我失败了

import os

rootFolder = "C:/Users/.../Desktop/Docs"

for folder in os.walk(rootFolder):
    for filename in folder:
        os.rename(filename, filename[4:])

最后一行给了我一个错误,系统找不到指定的路径,有人能帮我吗?所以关闭…

如果使用这些文件的完整路径名,代码将正常工作。如果将dirpath与文件名相结合,则可以从os.walk获取完整路径名。以下是方法:

import os

root_folder = "C:/Users/.../Desktop/Docs"

for dirpath, dirnames, filenames in os.walk(root_folder):
    for fname in filenames:
        full_fname = os.path.join(dirpath, fname)
        renamed = os.path.join(dirpath, fname[4:])
        os.rename(full_fname, renamed)
对重命名的文件使用完整路径名也很重要。否则,这些文件将被移动到运行Python解释器的目录中


请注意,在第三行代码中,我使用了文档所称的or序列解包。

os.walk生成三元组形式的dirpath、dirnames、filenames,因此您认为文件夹变量实际上是一个三元组-请参阅@lemonhead Ok我跟进了该链接,现在了解了三元组变量。但我仍然无法理解这种情况。对不起,我不熟悉这门语言,不知道最后一行该怎么办os.removeos.path.joinfilename,filename[12:]”是我后来的尝试。嗯,我有点搞不懂你当时想做什么。。。您是否要删除所有文件,去掉每个文件名的前4个字符,并对前12个字符进行处理?可能有助于澄清您的问题,或者举例说明应如何更改文件名……收到,对不起,我上次回答时犯了一个错误。忽略[12:]它应该是[4:]。简单地说,我只是尝试递归地遍历每个文件夹,去掉文件名的前4个字符。示例:“JOB Park St'=“Park St';”JOB Ford Property'='Ford Property'适合我,谢谢!是的。。。按照lemonhead的建议,我在os.path附近嗅探,但我无法找到使用dirpath的方法。我想如果您使用os.path.join,这意味着我的fname会将目录名附加到我的新fname中。但你所做的只是告诉它去哪里看。再次感谢柠檬头和你关注我的问题!天才总数