如何解决基于包含两列 {image_id, label} 的 CSV 文件命名图像
我有一个文件夹,里面有大量的图片(五类蔬菜),有特定的名称(图片 ID),还有一个 CSV 文件,其中包含两列,第一列是图像 ID,第二列是是标签(每个图像 ID 与标签 0、1、2、3 或 4 配对) 如何使用 python 重命名此文件夹中的图像以将标签作为新名称?!
解决方法
您可以使用标准的 os 模块重命名您的文件
import os
os.rename('YOU_CURRENT_IMAGE_NAME.jpg','NEW_NAME.jpg')
假设您有一个名为 my_pic.jpg 的图像,并且您想将其重命名为 ID=abc 和 labe=2,那么代码如下所示:
import os
def rename_image(existing_name,_id,label):
existing_name = 'my_pic.jpg'
extension = existing_name.split('.')[-1]
new_name = f'{_id}-{label}.{extension}'
os.rename(existing_name,new_name)
rename_image('my_pic.jpg','abc',2)
# new name is: abc-2.jpg
[编辑] 假设您有一个名为“images”的文件夹,您的所有图像都存储在此文件夹中,并且您有一个像这样的 csv 文件:
old_name1.jpg,new_name_001.jpg
another_old_pic.svg,new_name_for_this.svg
在这种情况下重命名所有文件的简单片段如下所示:
import os
import csv
IMG_FOLDER = 'images' # name of your image folder
CUR_PATH = os.getcwd() # current working directory
img_dir = os.path.join(CUR_PATH,IMG_FOLDER) # full path to images folder
with open('images.csv') as csv_file:
csv_data = csv.reader(csv_file)
images = os.listdir(img_dir) # a list of file names in images folder
for row in csv_data:
# we iterate over each row in csv and rename files
old_name,new_name = row
# we are just checking in case file exists in folder
if old_name in images:
# main part: renaming the file
os.rename(
os.path.join(CUR_PATH,IMG_FOLDER,old_name),os.path.join(CUR_PATH,new_name)
)
else:
print(f"Image {old_name!r} not found,skipping...")
您可以调整重命名部分,并为新图像名称添加任何您想要的内容(我猜您想包含某种标签?)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。