Python通过目录迭代并重命名

时间:2016-09-26 19:33:01

标签: python iteration rename

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

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(最近一次调用最后一次):文件“imageresizing-renamefiles.py”,第19行,in   os.rename(picpath,picpath.replace(“”,“ - ”)。lower())OSError:[Errno   2]没有这样的文件或目录

我的文件结构是一个根目录,其中代码从该文件夹运行并在该文件夹中运行如下 folder1 Image1jpgImage2jpgfolder2 Image3jpgImage4jpg等{}}。我想遍历每个文件以将文件(而不是文件夹)重命名为小写名称。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

picpath = os.path.join(root, pic)
                    #  ^^^^^

看起来应该做的工作。每the docs

  

请注意,列表中的名称不包含路径组件。要获取dirpath中文件或目录的完整路径(以top开头),请执行os.path.join(dirpath, name).

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

答案 1 :(得分:1)

您必须将目录名称附加到路径中,或者os.rename无法找到应用重命名的正确目录。

也就是说,转换为小写会使任务变得复杂。小写只能应用于基本名称(这可以在Windows文件系统上运行,因为情况并不重要,但如果路径的某些目录包含大写字母,则在Linux上会失败:幸运的是,您无法使用单个名称重命名整个数据库rename命令)

.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()))