Python遍历目录并重命名

2024-04-24 22:49:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图遍历子目录的列表,然后打开该子目录中的文件并将文件重命名为小写。这是我的代码:

for root, subdirs, pics in os.walk(rootdir):
  for pic in pics:
    if pic.endswith('.jpg'):
        picpath = os.path.join(pic)
        #print pic
        print picpath
        #os.rename(pic, pic.replace(" ", "-").lower())
        os.rename(picpath, picpath.replace(" ", "-").lower())

然后我得到:

Traceback (most recent call last): File "imageresizing-renamefiles.py", line 19, in os.rename(picpath, picpath.replace(" ", "-").lower()) OSError: [Errno 2] No such file or directory

我的文件结构是一个根目录,在这个目录中运行的代码如下所示 folder1Image1jpgImage2jpgfolder2与{}和{}等等。我想遍历每个文件,将文件(不是文件夹)重命名为小写名称。在

谢谢你的帮助。在


Tags: 文件代码in列表foroslowerreplace
2条回答
picpath = os.path.join(root, pic)
                    #  ^^^^^

看来它应该能胜任。根据the docs

Note that the names in the lists contain no path components. To get a full path (which begins with top) to a file or directory in dirpath, do os.path.join(dirpath, name).

这就是为什么你会得到一个“没有这样的文件”错误:你要求的是当前目录中的文件名,而在错误发生的时候这个文件名不是{}。在

您必须将目录名附加到路径中,否则os.rename找不到要应用重命名的正确目录。在

也就是说,你的小写转换会使任务复杂化。小写字母必须只应用于basename(在Windows文件系统上这是可行的,因为大小写无关紧要,但在Linux上,如果路径的某些目录包含大写字母,则会失败:幸运的是,您不能用一个rename命令重命名整个dirtree)

无论大小写,.jpg扩展名的匹配都应该完成,特别是如果您想将图片名称转换为小写:扩展名也可能是大写的(就像所有那些DCIM相机一样)

for root, subdirs, pics in os.walk(rootdir):
  for pic in pics:
    if pic.lower().endswith('.jpg'):  # more powerful: fnmatch.fnmatch(pic,"*.jpg")
        os.rename(os.path.join(root,pic), os.path.join(root,pic.replace(" ", "-").lower()))

相关问题 更多 >