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)
以下代码用于将 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'
我知道我的问题有点
我做错了什么?递归重命名文件的最简单方法是什么?
您一遍又一遍地将相同的 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)