Python os.rename无法在子目录中成功重命名,尽管使用了recursive=True的glob.glob,仍会抛出FileNotFoundError
以下代码用于将cwd和子目录中名为“notes”的文件重命名为“notes.html.pmd”。那些仍然在Python3.7和更早版本上的用户需要摆脱walrus操作符并替换它Python os.rename无法在子目录中成功重命名,尽管使用了recursive=True的glob.glob,仍会抛出FileNotFoundError,python,python-3.x,rename,file-rename,batch-rename,Python,Python 3.x,Rename,File Rename,Batch Rename,以下代码用于将cwd和子目录中名为“notes”的文件重命名为“notes.html.pmd”。那些仍然在Python3.7和更早版本上的用户需要摆脱walrus操作符并替换它 fileListOld = glob.glob(f"{(cwd := os.getcwd())}/**/{old_name}", recursive=True) 与 以运行此代码。无论如何,代码如下: #!/usr/bin/env python3.8 import glob, os old_na
fileListOld = glob.glob(f"{(cwd := os.getcwd())}/**/{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'
回溯(最近一次呼叫最后一次):
文件“/rename.py”,第17行,在
重命名(旧名称、新名称)
FileNotFoundError:[Errno 2]没有这样的文件或目录:“notes”->“notes.html.pmd”
我知道我的问题有点严重。然而,它的不同之处在于,我的代码还打算重命名子目录中的文件,因此recursive=True参数
我做错了什么?递归重命名文件的最简单方法是什么?您将相同的
旧名称==“notes”
重命名为新名称==“notes.html.pmd”
而不是使用glob.glob
提供的路径。我会使用:
#/usr/bin/env/python3
从pathlib导入路径
old_name=“注释”
新建\u name=“notes.html.pmd”
对于路径(“.”.glob(f“**/{old_name}”)中的旧路径:
旧路径.重命名(旧路径.父/新路径名)
我不明白你为什么要用变量f
迭代fileListOld
,而用相同的两个变量old\u name
和new\u name
调用rename
。我的意思是循环不会改变old\u name
和new\u name
的值,但是您正在调用os.rename(旧名称,新名称)
,就好像每次调用的操作都不一样。一般来说,如果您在某些内容中有一个类似于的循环,如f:
,而循环体不使用f
,可能有问题。将赋值表达式设置为cwd
有什么原因吗?为什么不直接使用f“{os.getcwd()}/**/{old_name}”
?这段代码似乎忽略了所有内容,除了old\u name
和new\u name
。正如其他人所指出的,这是因为您完全忽略了glob的结果,或者除old\u name和new\u name之外的任何变量。
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'