繁体   English   中英

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

[英]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 模块在这里很有帮助。

递归 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

扩展之前的部分在 pathlib 术语中称为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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM