Python 将匹配图像移动到单独文件夹的脚本

Python script to move matching images to separate folder

我使用 glob (https://docs.python.org/2/library/glob.html) 制作了一个 python 脚本,该脚本匹配 JPG 图像及其匹配的 XML 注释并将其移动到不同的文件夹(例如我有 1.jpg、2.jpg、3.jpg、1.xml、3.xml) 然后它移动 (1.jpg、1.xml 和 3.jpg ,3.xml) 到新文件夹。 2.jpg 未移动,因为没有 xml 匹配此图像

import os
import glob
import os.path
import shutil

path = os.getcwd()
j=0


os.chdir("path\to\folder\")   
os.mkdir("image_with_xml")     # create a new folder
newpath =  "path\to\folder\"+"image_with_xml" 

while j < len(glob.glob(path+"\*"))-1:  
    a=glob.glob(path+"\*")[j]

    b=glob.glob(path+"\*")[j+1]


    print(a)
    a1 = os.path.splitext(a)[0]
    b1 = os.path.splitext(b)[0]


    if a1==b1:
        j=j+2
        shutil.move(a,newpath)   # move image to new path.
        shutil.move(b,newpath)   # move image to new path.
    else:
        j=j+1

上面的代码适用于将一些但不是所有图像移动到新文件夹,为了移动剩余图像我必须在脚本中创建新文件夹然后将剩余图像移动到那里(例如:假设我有 100 个 jpg 和 100 个匹配项 XML 然后我第一次 运行 这个脚本只有 62 个被移动到新文件夹,第二次我 运行 具有不同文件夹名称的脚本剩下的 38 个被移动到下一个文件夹)。如何修改脚本,以便将匹配 XML 的所有图像移动到一个文件夹?

这个应该可以胜任。我创建了两个列表,一个是 xml,一个是 jpg。然后我检查两个列表中是否存在文件名。如果是:移动!

为了便于阅读,我添加了一个新函数来创建列表。

import os
import glob
import shutil

def remove_ext(list_of_pathnames):
    """
    removes the extension from each filename
    """
    return [os.path.splitext(filename)[0] for filename in list_of_pathnames]

path = os.getcwd()
os.chdir("path\to\folder\")   
os.mkdir("image_with_xml")     # create a new folder
newpath = os.path.join("path\to\folder\","image_with_xml") # made it os independent... 

list_of_jpgs = glob.glob(path+"\*.jpg")
list_of_xmls = glob.glob(path+"\*.xml")

print(list_of_jpgs, "\n\n", list_of_xmls) #remove

jpgs_without_extension = remove_ext(list_of_jpgs)
xmls_without_extension = remove_ext(list_of_xmls)

print(jpgs_without_extension, "\n\n", xmls_without_extension) #remove

for filename in jpgs_without_extension:
    if filename in xmls_without_extension:
        print("moving", filename) #remove
        shutil.move(filename + '.jpg'), newpath)   # move image to new path.
        shutil.move(filename + '.xml'), newpath)   # move image to new path.