【问题标题】:Python os.rename and os.walk togetherPython os.rename 和 os.walk 一起
【发布时间】:2016-09-23 09:32:49
【问题描述】:

我刚刚写了一个python脚本来摆脱文件名中一些烦人的后缀,

这是我的代码:

import os

for root, dirs, files in os.walk("path"):

    for filename in files:

        if filename.endswith("[AnnoyingTag].mov"):

            os.rename(filename, filename[:-18]+'.mov')

但我在最后一行得到了错误:

OSError: [Errno 2] No such file or directory

我很确定我有正确的路径,因为我可以正确打印出所有文件名。

...真的不知道为什么这行不通。

感谢您的回答

【问题讨论】:

  • list(os.walk("path"))
  • 为什么在调用重命名之前不打印文件名?尝试调试。
  • 我做了,它正确打印出所有文件名。我试过类型(文件名),它们都返回字符串。

标签: python filenames os.walk


【解决方案1】:

加入路径的首选方法是使用os.path.join,更改此行:

os.rename(filename, filename[:-18]+'.mov')

用这个替换它:

os.rename(os.path.join(root, filename), os.path.join(root, filename[:-18]+'.mov'))

【讨论】:

  • 谢谢!!有用。但是我可以进一步问为什么原始代码可以工作吗?
【解决方案2】:

你可以替换

os.rename(filename, filename[:-18]+'.mov')

os.rename(root + os.sep + filename, root + os.sep + filename[:-18]+'.mov')

【讨论】:

  • 谢谢!!有用。但是我可以进一步问为什么原始代码可以工作吗?
  • 在 os.rename 函数中,你必须给出完整路径,否则它会在你的脚本被调用的目录中搜索文件。我不太确定“为什么原始代码会起作用”是什么意思。
  • 哦,我的意思是不会。谢谢你的解释,我学到了很多
【解决方案3】:

固定:

import os

for root, dirs, files in os.walk("path"):
    for filename in files:
        if filename.endswith("[AnnoyingTag].mov"):
            os.rename(root+'\\'+filename, root+'\\'+filename[:-18]+'.mov')

我认为您的问题是您要重命名的文件不在当前工作目录中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多