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

标签 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 的图像移至一个文件夹?

最佳答案

这个应该可以完成这项工作。我创建了两个列表,一个是 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.

关于将匹配图像移动到单独文件夹的 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48570625/

相关文章:

python-3.x - 为什么向图像添加高斯噪声会产生白屏?

scala - 模式匹配期间需要稳定的标识符吗? (斯卡拉)

scala - 如何模式匹配scala列表的头部和尾部类型?

python - 删除 csv 文件中正在使用的行

linux - Makefile 规则未在 Linux 中执行

python - 防止 main 中的回溯

python - 在 pisa html 到 pdf 库中使用图像 URL 进行 link_callback

python - 我如何解决keras上的错误 "allocation exceeds 10 of system memory"?

python - 如何在自己的线程中扭曲运行并正确停止?

python - PyCharm 没有在 "pass"上击中 Quick and Dirty 断点