我在一个目录中有一个巨大的图像列表,另一个(.txt文件)中有另一个相应的注释列表。
我需要在匹配的图像注释后对每个图像执行操作,并将其保存到另一个目录中。有没有一种优雅的方法,不是每次都要做三次chdir?
也许使用cPickle或用于快速文件管理的任何库?
import glob
from PIL import Image
os.chdir('path_images')
list_im=glob.glob('*.jpg')
list_im.sort()
list_im=path_images+list_im
os.chdir('path_txt')
list_annot=glob.glob('*.txt')
list_annot.sort()
list_annot=path_txt+list_im
for i in range(0,len(list_images)):
#os.chdir('path_images')
im=Image.open(list_im[i])
#os.chdir('path_text')
action_on_image(im,list_annot[i])
#os.chdir('path_to_save_image')
im.save(path_to_save+nom_image)
我是Python的真正初学者,但我确信我的代码效率极低且可以改进。
答案 0 :(得分:2)
您不必须chdir
(以及FWIW,您真的不想依赖当前的工作目录)。在代码中的任何地方使用绝对路径,你就没事了。
import os
import glob
from PIL import Image
abs_images_path = <absolute path to your images directory here>
abs_txt_path = <absolute path to your txt directory here>
abs_dest_path = <absolute path to where you want to save your images>
list_im=sorted(glob.glob(os.path.join(abs_images_path, '*.jpg')))
list_annot=sorted(glob.glob(os.path.join(abs_txt_path, '*.txt')))
for im_path, txt_path in zip(list_im, list_annot):
im = Image.open(im_path)
action_on_image(im, txt_path)
im.save(os.path.join(abs_dest_path, nom_image))
请注意,如果您的路径与安装脚本的位置相关,则可以使用os.path.dirname(os.path.abspath(__file__))
获取脚本的目录路径