os.rename 未能成功重命名子目录,抛出 FileNotFoundError 尽管使用 glob.glob 和 recursive=True

os.rename does not succeed in renaming in subdirectories, throws FileNotFoundError despite using glob.glob with recursive=True

以下代码用于将 cwd 和子目录中名为“notes”的文件重命名为“notes.html.pmd”。仍在使用 Python3.7 和更早版本的那些需要摆脱海象运算符并替换为

fileListOld = glob.glob(f"{(cwd := os.getcwd())}/**/{old_name}", recursive=True)

cwd = os.getcwd()
fileListOld = glob.glob(f"{cwd}/**/{old_name}", recursive=True)

为了运行这段代码。无论如何,代码如下:

#!/usr/bin/env python3.8

import glob, os

old_name = r"notes"

new_name = r"notes.html.pmd"

fileListOld = glob.glob(f"{(cwd := os.getcwd())}/**/{old_name}", recursive=True)
print(fileListOld)

for f in fileListOld:
    os.rename(old_name, new_name)

问题是仅在 CWD 中而不是在子目录中重命名“notes”。此外 Python 抛出以下错误:

Traceback (most recent call last):
  File "./rename.py", line 17, in <module>
    os.rename(old_name, new_name)     
FileNotFoundError: [Errno 2] No such file or directory: 'notes' -> 'notes.html.pmd'

我知道我的问题有点。然而,不同之处在于我的代码还打算重命名子目录中的文件,因此 recursive=True 参数.

我做错了什么?递归重命名文件的最简单方法是什么?

您一遍又一遍地将相同的 old_name == "notes" 重命名为 new_name == "notes.html.pmd",而不是使用 glob.glob 提供的路径。我会使用 pathlib:

#!/usr/bin/env/python3

from pathlib import Path

old_name = "notes"
new_name = "notes.html.pmd"

for old_path in Path(".").glob(f"**/{old_name}"):
    old_path.rename(old_path.parent / new_name)