[英]Python code for renaming files in directory not working
我想不定期地按数字顺序重命名文件,例如1.png,2.png,3.png等。
我编写此代码是为了做到这一点,我只是简单地以打印文件名的方式来结束它,以确保它是正确的:
import os
os.chdir('/Users/hasso/Pictures/Digital Art/saved images for vid/1')
for f in os.listdir():
f_name=1
f_ext= '.png'
print('{}{}'.format(f_name, f_ext))
我将如何解决呢?
我不确定为什么只需将路径直接传递给os.listdir()
时,为什么需要使用os.chdir()
来更改目录。 要重命名文件,可以使用os.rename()
。 您还需要增加文件名的计数器,因为您的当前代码在每次迭代中都使fname
等于1
。 您需要将计数器保持在循环外,并在循环内递增。 在这里可以使用enumerate()
,因为您可以改用索引。
基本版本:
from os import listdir
from os import rename
from os.path import join
path = "path_to_images"
for i, f in enumerate(listdir(path), start=1):
rename(join(path, f), join(path, str(i) + '.png'))
您可以使用os.path.join()
获取完整路径,因为os.listdir()
不包含文件的完整路径。 上面的代码也不是很健壮,因为它重命名了所有文件,并且不处理重命名已经存在的.png
文件。
进阶版本:
from os import listdir
from os import rename
from os.path import join
from os.path import exists
path = "path_to_images"
extension = '.png'
fname = 1
for f in listdir(path):
if f.endswith(extension):
while exists(join(path, str(fname) + extension)):
fname += 1
rename(join(path, f), join(path, str(fname) + extension))
fname += 1
使用os.path.exists()
检查文件是否已经存在。
您会不断得到建议的1.png
作为新名称,因为您总是在循环内设置f_name = 1
。 在循环之前用1
对其进行初始化,然后在重命名每个文件时对其进行递增。
其他几点:
os.chdir
因为即使默认值为.
–当前目录–,您还可以提供os.filelist
的目标路径。 user
主目录时,如果不必进行硬编码,那就很好了。 os.path.expanduser
为您检索此值。 .png
文件,然后在该列表上循环。 os.rename
如果尝试重命名为已经存在的名称,将引发错误。 我下面要做的是检查要使用的下一个名称是否已经在列表中,如果是,请增加f_name
数量。 import os
yourPath = os.path.expanduser('~')+'/Pictures/Digital Art/saved images for vid/1'
filelist = []
for f in os.listdir(yourPath):
if f.lower().endswith('.png'):
filelist.append (f)
f_name = 1
for f in filelist:
while True:
next_name = str(f_name)+'.png'
if not next_name in filelist:
break
f_name += 1
print ('Renaming {} to {}'.format(yourPath+'/'+f, next_name))
# os.rename (yourPath+'/'+f, next_name)
f_name += 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.