如何将子文件夹中所有特定文件类型的文件重命名为具有相同文件扩展名但相同文件名的名称

How to rename all specific filetypes of files within subfolders to name with same file extension but same file name

我的子文件夹中有 690 个文件 - 子文件夹名称需要保持不变,但每个子文件夹中的 .iso 文件需要重命名为 game.iso - 这是可能的,因为每个 ISO 都在其自己的文件夹中(文件夹名称不能更改)

我目前正在自学Python3,但我真的很挣扎。

感谢任何帮助。干杯。

“较新的”pathlib module 在这里很有用。

递归 glob 可以通过扩展名匹配所有文件名。

>>> from pathlib import Path
>>> for p in Path().rglob('*.iso'):
...     print(p)
a/b/2.iso
a/b/c/d/3.iso
a/b/c/d/e/1.iso

扩展名之前的部分在路径库术语中称为 stem - 您可以使用 .with_stem()

修改它
>>> for p in Path().rglob('*.iso'):
...     print(p.with_stem('game'))
a/b/game.iso
a/b/c/d/game.iso
a/b/c/d/e/game.iso

您可以将其直接传递给 .rename() 方法

for p in Path().rglob('*.iso'):
    p.rename(p.with_stem('game'))

这将重命名所有文件:

>>> for p in Path().rglob('*.iso'):
...     print(p)
a/b/game.iso
a/b/c/d/game.iso
a/b/c/d/e/game.iso

这是实现此目的的脚本。它递归地这样做,你 运行 它通过提供你想要开始工作的根目录来实现。例如,我将脚本保存为 iso_rename:./iso_rename <enter full path to start lookin for .iso files>

#!/usr/local/bin/python3

import os, sys

dir = sys.argv[1]

def rename_iso(dir):
  items = os.scandir(dir)

  for item in items:
    if item.is_file() and item.name.endswith('.iso'):
      if item.name == 'game.iso':
        continue
      os.rename(item.path, os.path.join(dir, 'game.iso'))
    elif item.is_dir():
      rename_iso(item.path)

rename_iso(dir)