【问题标题】:Replace part of filenames in all subdirectories with Python用 Python 替换所有子目录中的部分文件名
【发布时间】:2020-08-14 07:26:25
【问题描述】:

我正在尝试用另一个文件名的一部分替换所有子目录中的文件。

我已设法在我的脚本所在的当前文件夹中执行此操作,但我需要它适用于所有子文件夹。

这是我用来重命名当前文件夹中文件的代码:

import os
path =  os.getcwd()
filenames = os.listdir(path)

for filename in filenames:
    os.rename(filename, filename.replace("PART_TO_REPLACE", "NEW_PART"))

这是我尝试使它适用于我文件夹中的所有子目录:

import os
path = "C:/Users/me/Desktop/Python test"

for root,dirname,filename in os.walk(path):   
     for filename in filenames:
        os.rename(filename, filename.replace("PART_TO_REPLACE", "NEW_PART"))

当我运行第二个脚本时什么都没有发生。我的文件没有重命名。我也没有收到任何错误消息。

我的 Python Shell 弹窗显示:

Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license()" for more information.
>>> 
======= RESTART: /Users/me/Desktop/Python test/Child Rename.py =======
>>> 

谢谢

【问题讨论】:

  • 您的问题是什么?代码的行为是否不符合预期?编辑问题,详细说明您期望发生的事情与正在发生的事情。顺便说一句,您将需要对这个问题使用递归。
  • 嗨蒂姆。代码没有做任何事情,我什至没有收到错误消息,我的文件仍然具有相同的名称。
  • 当循环来自os.walk 的返回值时,您忽略了root 的值。那可能是你的问题。也许打印出rootfilenames 的值来查看它们包含的内容。

标签: python file rename subdirectory


【解决方案1】:

试试这个:

for root, dirnames, filenames in os.walk(path):
    for filename in filenames:
        file = os.path.join(root, filename)
        os.rename(file, file.replace("PART_TO_REPLACE", "NEW_PART"))

【讨论】:

  • 感谢您的回答,尽管您的代码我仍然得到相同的结果
猜你喜欢
  • 2019-05-01
  • 1970-01-01
  • 2012-05-13
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2017-08-10
相关资源
最近更新 更多