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

时间:2018-02-01 19:48:21

标签: python python-3.x pattern-matching glob

我使用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的所有图像都移动到一个文件夹?

1 个答案:

答案 0 :(得分:1)

这个应该做的工作。我创建了两个列表,一个是xmls,另一个是jpgs。然后我检查两个列表中是否存在文件名。如果是:移动!

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

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.