我正在尝试遍历子目录列表,然后打开该子目录中的文件并将文件重命名为小写。这是我的代码:
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
Image1jpg
和Image2jpg
,folder2
Image3jpg
和Image4jpg
等{}}。我想遍历每个文件以将文件(而不是文件夹)重命名为小写名称。
感谢任何帮助。
答案 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()))