Python - 使用循环

时间:2017-08-11 05:08:11

标签: python raspberry-pi

我有一个文件夹,其中包含当前以时间戳命名的图像。我想重命名目录中的所有图像,使它们被命名为'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 个答案:

答案 0 :(得分:4)

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 :(得分:1)

两个建议:

  • 使用glob。这使您可以对文件名和目录进行更细粒度的控制以进行迭代。
  • 使用枚举而不是手动计算迭代次数

示例:

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'))

答案 2 :(得分:0)

方法rename()采用绝对路径,您只给它文件名,因此无法找到文件。

在文件名前面添加文件夹的目录以获取绝对路径

path = 'G:/ftest'

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

答案 3 :(得分:0)

这将起作用

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

该函数使用文件路径的两个参数来重命名文件,并将新名称重命名为文件