我创建了下面的重命名器(如下)来替换文件名和目录名中的句点,这对于文件名来说似乎很好,但是对于以整数开头的目录名来说就不行了。不会产生任何错误。如果在任何目录名中都没有整数,那么它对目录是有效的。否则,它只是重命名文件,而不是目录。有人能告诉我为什么吗? 任何帮助都非常感谢。
import os
def Replace_Filename(Root_Folder):
for Root, Dirs, Files in os.walk(Root_Folder):
for File in Files:
print(File)
Fname, Fext = os.path.splitext(File)
print(Fname)
print(Fext)
Replaced = Fname.replace(".","_")
print(Replaced)
New_Fname = Replaced + Fext
print(New_Fname)
F_path = os.path.join(Root, File)
print(F_path)
New_Fpath = os.path.join(Root, New_Fname)
print(New_Fpath)
os.rename(F_path, New_Fpath)
def Replace_Dirname(Root_Folder):
for Root, Dirs, Files in os.walk(Root_Folder):
for Dir in Dirs:
print(Dir)
New_Dname = Dir.replace(".","_")
print(New_Dname)
D_Path = os.path.join(Root, Dir)
print(D_Path)
New_Dpath = os.path.join(Root, New_Dname)
print(New_Dpath)
os.rename(D_Path, New_Dpath)
Root_Folder = "D:\\Practicerename-Copy"
Replace_Filename(Root_Folder)
Replace_Dirname(Root_Folder)
问题来源StackOverflow 地址:/questions/59379027/why-does-this-python-using-3-7-renamer-not-allow-directories-to-start-with-a-n
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在你的代码中,Replace_Dirname
函数应该能够正常工作,包括重命名以整数开头的目录。但是,根据你的描述,如果在递归遍历并重命名文件之后再尝试重命名目录,可能会遇到问题,因为一旦文件名更改,os.walk() 生成的目录列表可能不再匹配实际的目录结构。
为了解决这个问题,你应该先执行 Replace_Dirname
函数,然后再执行 Replace_Filename
函数。这样可以确保在尝试重命名目录之前,目录结构仍然是原始状态。下面是调整后的代码顺序:
import os
def Replace_Filename(Root_Folder):
# ... (原函数内容保持不变)
def Replace_Dirname(Root_Folder):
# ... (原函数内容保持不变)
Root_Folder = "D:\\Practicerename-Copy"
Replace_Dirname(Root_Folder) # 先重命名目录
Replace_Filename(Root_Folder) # 然后重命名文件
另一个潜在的问题可能是并发修改目录树。尽管 Python 的 os.rename()
应该是原子操作,但在快速连续调用时,尤其是在大型或深层目录结构中,操作系统级别的延迟或锁可能导致意外行为。不过,在大多数情况下,上述顺序调整应该足以解决问题。
如果问题仍然存在,考虑添加错误处理逻辑来捕获并打印 os.rename()
调用中可能出现的异常,这可以帮助诊断具体哪里出了问题。例如:
try:
os.rename(D_Path, New_Dpath)
except OSError as e:
print(f"Error: {e.strerror}. Renaming directory {D_Path} to {New_Dpath} failed.")
请尝试这个顺序和错误处理建议,看是否能解决你遇到的问题。