Python - 使用循环重命名目录中的所有文件

8
我有一个文件夹,里面有很多以时间戳命名的图片。我想将该目录中的所有图像重命名为“captured(x).jpg”,其中x是目录中的图像编号。
我一直在尝试实现不同的建议,但都没有成功。下面是我的代码:
path = '/home/pi/images/'
i = 0
for filename in os.listdir(path):
  os.rename(filename, 'captured'+str(i)+'.jpg'
  i = i +1

我一直收到一个错误,说“没有这样的文件或目录”,针对os.rename行。
4个回答

15

os.listdir() 返回的结果不包括路径。

path = '/home/pi/images/'
i = 0
for filename in os.listdir(path):
    os.rename(os.path.join(path,filename), os.path.join(path,'captured'+str(i)+'.jpg'))
    i = i +1

1
方法rename()需要绝对路径,而你只提供了文件名,因此它无法定位文件。
在文件名前面添加文件夹的目录以获取绝对路径。
path = 'G:/ftest'

i = 0
for filename in os.listdir(path):
  os.rename(path+'/'+filename, path+'/captured'+str(i)+'.jpg')
  i = i +1

1
为什么我会收到PermissionError: [WinError 32]的错误提示,显示该文件正在被另一个进程使用,而我只是想重命名文件,而不是打开它呢? - uniquegino

1

两个建议:

  • 使用glob。这可以让您更精细地控制要迭代的文件名和目录。
  • 使用enumerate而不是手动计算迭代次数

示例:

import glob
import os

path = '/home/pi/images/'
for i, filename in enumerate(glob.glob(path + '*.jpg')):
    os.rename(filename, os.path.join(path, 'captured' + str(i) + '.jpg'))

1

这将会生效

import glob2
import os


def rename(f_path, new_name):
    filelist = glob2.glob(f_path + "*.ma")
    count = 0
    for file in filelist:
        print("File Count : ", count)
        filename = os.path.split(file)
        print(filename)
        new_filename = f_path + new_name + str(count + 1) + ".ma"
        os.rename(f_path+filename[1], new_filename)
        print(new_filename)
        count = count + 1

该函数需要两个参数,一个是您要重命名的文件路径,另一个是您要给该文件取的新名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接