【问题标题】:Python: Rename multiple files starting with a "#"Python:重命名以“#”开头的多个文件
【发布时间】:2018-06-18 15:41:17
【问题描述】:

我想重命名一个目录中的多个文件,如果它们以“#”开头,例如:

#222_message_split -> 222_message_split

#013_message_split2 -> 013_message_split2

编辑:我试过这个:

for filename in os.listdir(PATH):
    if filename.startswith("#"):
        os.rename(filename, filename[1:])

edit2:在 pstatix 的帮助下,我得到了代码,现在还检查了“#____”文件的子目录。

for root, dirs, files in os.walk(PATH):
for dir in dirs:
    if dir.startswith("#"):
        org_fp = os.path.join(root, dir)
        new_fp = os.path.join(root, dir[1:])
        os.rename(org_fp, new_fp)

【问题讨论】:

  • 好的。好吧,你试过什么?
  • 将您的代码添加到问题中
  • 我编辑了我的问题并添加了代码:)

标签: python directory subdirectory renaming


【解决方案1】:

你已经接近了,虽然你的缩进是关闭的:

原问题:

for filename in os.listdir(PATH):
    if filename.startswith("#"):
        org_fp = os.path.join(PATH, filename)
        new_fp = os.path.join(PATH, filename[1:])
        os.rename(org_fp, new_fp)

os.listdir() 不会返回完整路径,即使 PATH 是完整路径;仅列出基本名称。所以你必须为os.rename()提供完整的路径才能正常运行;使用os.path.join()完成。

评论请求更新:

for root, dirs, files in os.walk(PATH):
    for file in files:
        if file.startswith("#"):
            org_fp = os.path.join(root, file)
            new_fp = os.path.join(root, file[1:])
            os.rename(org_fp, new_fp)

查看docs 和此post 了解信息。

【讨论】:

  • 效果很好,非常感谢 pstatix!不幸的是,我不得不更加打扰您,因为我希望我的代码也遍历每个子文件夹,我必须在代码中添加什么来实现这一点?
  • 再次,非常感谢,我会尝试这个更新的代码并检查文档等,很高兴你帮助了我!
  • @DanielSeidl 您选择了作为问题的答案;你确认它有效吗?
  • 在阅读更新之前这样做了,因为这是我最初提出的问题的答案。直到现在我还不能让它工作,但我仍在尝试进入你链接的文档和帖子,因为我现在只编码了大约一个月。会尝试理解你做了什么,以及“walk()”真正做了什么:) 基本上我有一个包含文件夹的目录,其中包含子文件夹等等,在一些文件/文件夹中以 # -> the thing 开头我想删除。
  • @DanielSeidl os.walk() 返回一个包含 3 个项目的元组。文档描述了它的作用并提供了一个示例。应该有你需要的一切。当你得到它的工作或有更多问题时,回来询问或选择作为答案。
猜你喜欢
  • 2018-02-28
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 2019-11-02
  • 2015-12-11
  • 1970-01-01
  • 2020-03-19
  • 2014-02-19
相关资源
最近更新 更多