Python 如何将一些特定的.jpg文件复制到另一个目录?

Python 如何将一些特定的.jpg文件复制到另一个目录?,python,python-3.x,cv2,Python,Python 3.x,Cv2,我想把一些特定的jpg文件复制到另一个目录,但我不明白为什么它不能工作?我有很多图片,目前只想对一些类别进行排序,这些类别的起始名称分别为15_0_xxx.jpg和15_1_xxx.jpg import cv2 import sys import os import shutil from os import listdir from os.path import isfile, join mypath = "c:/Users/Harum/Desktop/make dir/" file_n

我想把一些特定的jpg文件复制到另一个目录,但我不明白为什么它不能工作?我有很多图片,目前只想对一些类别进行排序,这些类别的起始名称分别为15_0_xxx.jpg和15_1_xxx.jpg

import cv2

import sys
import os
import shutil 
from os import listdir
from os.path import isfile, join

mypath = "c:/Users/Harum/Desktop/make dir/"
file_names = [ f for f in listdir(mypath) if isfile(join(mypath, f))]

print(str(len(file_names))+ ' images loaded')

cont_M =0
cont_F =0
m_age = "c:/Users/Harum/Desktop/make dir/M_15/"
f_age = "c:/Users/Harum/Desktop/make dir/F_15/"

input_m = []
input_mS =[]
input_fS =[]
input_f = []

def getZeros(number):
    if(number > 10 and number <100):
        return "0"
    if(number < 10):
        return "00"
    else:
        return ""

for i, file in enumerate(file_names):
    if file_names[i][0] == "15_0":
        cont_M +=1
        image = cv2.imread(mypath+file)
        input_m.append(image)
        input_mS.append(0)
        zeros = getZeros(cont_M)
        cv2.imwrite(m_age +"m_age"+str(zeros)+ str(cont_M)+ ".jpg",image)

    if file_names[i][0] == "15_1":
        cont_F +=1
        image = cv2.imread(mypath+file)
        input_f.append(image)
        input_fs.append(1)
        cv2.imwrite(f_age+"F_age"+str(zeros)+ str(cont_M)+ ".jpg",image) 
导入cv2
导入系统
导入操作系统
进口舒蒂尔
从操作系统导入listdir
从os.path导入isfile,加入
mypath=“c:/Users/Harum/Desktop/make dir/”
file_names=[f表示listdir(mypath)中的f,如果isfile(join(mypath,f))]
打印(str(len(文件名))+“已加载图像”)
cont_M=0
续F=0
m_age=“c:/Users/Harum/Desktop/make dir/m_15/”
f_age=“c:/Users/Harum/Desktop/make dir/f_15/”
输入_m=[]
输入_mS=[]
输入_fS=[]
输入_f=[]
def getZeros(编号):

如果(编号>10和编号编辑:忘记了复制部分。您可以使用shutil进行编辑

使用glob和操作系统,您会做得更好:

from shutil import copyfile
import glob
import os

mypath = "c:/Users/Harum/Desktop/make dir/"
destination_path = "c:/Users/Harum/Desktop/copy/"
# using fstrings to add wildcard character to consider all files. You could add a
## file extension after, as in f"{mypath}15_*.jpg"
file_names = glob.glob(f"{mypath}15_*")

# skip the middle to the ifs
# (...)

# removed the enumerate as it doesn't seems like you're using the positional list index

for file in file_names:
    # getting only the filename (with extension)
    file_name = os.path.basename(file)

    # using the str().startswith() to check True or False
    if file_name.startswith("15_0"):
        cont_M +=1
        copyfile(file, f"{destination_path}{file_name}")
        # (...)

    elif file_name.startswith("15_1"):
        cont_F +=1
        copyfile(file, f"{destination_path}{file_name}")
        #(...)

请添加问题的正确描述!如果您将pathlib与glob一起使用,这将非常容易…为什么要使用OpenCV进行此操作?有意的,我只是复制了OP的方式…但是是的..似乎没有必要,将进行编辑,干杯!如果您要使用glob,不妨使用
f“{mypath}15_*”
只是为了减少返回的文件。@Joey,你确定吗?在OP's检查
如果文件名[i][0]
question@Joey嘿,Joe,我没有说OP有语法错误。你说在他的代码示例中,
OP没有双if,我刚才回答说有两个“if文件名”这应该是你在第一次评论中建议的if/else。@mrbTT抱歉,这是一个误解。我只是想指出你代码中最后一个
if
语句中的错误。你编写了
elif-if-file\u name.startswith(“15\u 1”)