包含字符串和intiger计数器的Python,用于命名文件夹中的内容

包含字符串和intiger计数器的Python,用于命名文件夹中的内容,python,opencv,Python,Opencv,我使用的是widows 10 pro,python 3.6.2rc1。我正在训练由tensorflow制作的卷积神经网络。作为预处理阶段,我编写了以下代码来调整每个图像的大小。它工作得非常好,但是因为我有100多个训练图像(我把它设置得很低,只是为了看看它现在是如何工作的),它们的名称非常不同,最后我希望它们都遵循与“image001”、“image002”等中相同的命名约定,我添加了一个计数器,在使用cv2.imwrite()将图像保存到同一文件夹之前,使用它更改图像的名称。但我得到了这个错误

我使用的是widows 10 pro,python 3.6.2rc1。我正在训练由tensorflow制作的卷积神经网络。作为预处理阶段,我编写了以下代码来调整每个图像的大小。它工作得非常好,但是因为我有100多个训练图像(我把它设置得很低,只是为了看看它现在是如何工作的),它们的名称非常不同,最后我希望它们都遵循与“image001”、“image002”等中相同的命名约定,我添加了一个计数器,在使用cv2.imwrite()将图像保存到同一文件夹之前,使用它更改图像的名称。但我得到了这个错误:

Traceback (most recent call last):
  File "E:/Python/TrainingData/TrainingPrep.py", line 11, in <module>
    cv2.imwrite(imageName,re)
cv2.error: D:\Build\OpenCV\opencv-3.2.0\modules\imgcodecs\src\loadsave.cpp:531: error: (-2) could not find a writer for the specified extension in function cv::imwrite_
我需要我的图片名为image001,image00x。如果你能帮我解决这个问题,我将不胜感激

非常感谢。

该方法需要扩展名来确定文件格式

只需将您的行更改为(PNG或任何您想要的文件格式),它就可以工作:

imageName = "image"+counter+".png"
如果愿意,您可以稍后使用
glob.glob
重命名这些文件。工作示例应如下所示:

import cv2
import glob
import os

i=0
images = glob.glob("*.jpg")
for image in images:
    img = cv2.imread(image,1)
    counter=str(i)
    re = cv2.resize(img,(128,128))
    imageName = "image"+counter+".jpg"
    cv2.imwrite(imageName,re)
    i=i+1
    print(counter)

rename = glob.glob("images*.jpg")
for src in rename:
    dst = os.path.splitext(item)[0] 
    os.rename(src, dst)
该方法要求扩展名确定文件格式

只需将您的行更改为(PNG或任何您想要的文件格式),它就可以工作:

imageName = "image"+counter+".png"
如果愿意,您可以稍后使用
glob.glob
重命名这些文件。工作示例应如下所示:

import cv2
import glob
import os

i=0
images = glob.glob("*.jpg")
for image in images:
    img = cv2.imread(image,1)
    counter=str(i)
    re = cv2.resize(img,(128,128))
    imageName = "image"+counter+".jpg"
    cv2.imwrite(imageName,re)
    i=i+1
    print(counter)

rename = glob.glob("images*.jpg")
for src in rename:
    dst = os.path.splitext(item)[0] 
    os.rename(src, dst)

此方法将为您提供文件名中所需的前导零:

import cv2
import glob

i=0
images = glob.glob("*.jpg")
for image in images:
    img = cv2.imread(image,1)
    re = cv2.resize(img,(128,128))
    imageName = "image{:03d}.png".format(i) # format i as 3 characters with leading zeros
    cv2.imwrite(imageName,re)
    i=i+1
    print(counter)

此方法将为您提供文件名中所需的前导零:

import cv2
import glob

i=0
images = glob.glob("*.jpg")
for image in images:
    img = cv2.imread(image,1)
    re = cv2.resize(img,(128,128))
    imageName = "image{:03d}.png".format(i) # format i as 3 characters with leading zeros
    cv2.imwrite(imageName,re)
    i=i+1
    print(counter)

当您在迭代时需要计数器时,它非常方便。在迭代时需要计数器时非常方便。太好了。谢谢你的回答。只是一个快速的双重检查。在重命名的情况下,为什么在上述代码中dst和src是相同的?例如,当我稍后将文件名中的“image”更改为“pic”时,它会重新运行以下错误。错误是回溯(最近一次调用last):文件“E:/Python/Images/RenameLater.py”,第11行,在os.rename(src,dst)文件existserror:[WinError 183]已经存在的情况下无法创建文件:“image001.jpg'->”E:\\Python\\Images'@E.Erfan,因为我使用的是“image*.jpg”扩展模式,它在寻找任何以“image”开头,以“.jpg”结尾的内容。在这种情况下,“pic”将不起作用。你可以修改上面的代码来处理很多情况。谢谢你的回答。只是一个快速的双重检查。在重命名的情况下,为什么在上述代码中dst和src是相同的?例如,当我稍后将文件名中的“image”更改为“pic”时,它会重新运行以下错误。错误是回溯(最近一次调用last):文件“E:/Python/Images/RenameLater.py”,第11行,在os.rename(src,dst)文件existserror:[WinError 183]已经存在的情况下无法创建文件:“image001.jpg'->”E:\\Python\\Images'@E.Erfan,因为我使用的是“image*.jpg”扩展模式,它在寻找任何以“image”开头,以“.jpg”结尾的内容。在这种情况下,“pic”将不起作用。您可以修改上面的代码以处理许多情况。添加零的想法非常好,使其更加组织化。感谢添加零的想法非常好,并且使它更加有条理。谢谢