如何使用文件中的名称将图像复制到文件夹中

How to copy image in a folder using its name from a file

我正在尝试将图像从文件夹复制到另一个文件中存在的同名文件夹

dst="t"
path = 'train' 
f = open("file_txt.txt",'r')
files = os.listdir(path)
for i in files :
    if i.endswith('.jpg'):
       j=i.rsplit('.', 1)[0]
       #print(j)
       lines = f.readlines()
       for  line in lines:
            #print(line)
            if line == j:
               #print(line)
               shutil.copy(path+'/'+line.strip(), dst)

j 包含类似

COCO_train2014_000000110431
COCO_train2014_000000110437
COCO_train2014_000000110439

行包含类似

COCO_train2014_000000206463

COCO_train2014_000000206465

COCO_train2014_000000206467

但是 new_folder 是空的,我尝试打印存在于 if 条件下的(行)但什么也没得到,而 file_txt 包含图像的名称,而 train 是一个包含图像的文件夹本身

你的代码乱七八糟,但我认为你的问题是你尝试在没有 .jpg 的情况下复制 COCO_train2014_000000110431 但你必须复制 COCO_train2014_000000110431.jpg

其他问题可能是:您在使用 .strip() 之前比较 line,所以它可能在末尾有 \n。所以你比较if name<enter> == name。如果你 运行 print(line) 那么名称可能看起来不错(因为 \n 不可见)但是如果你添加一些字符 print(f">>>{line}<<<") 那么你可能会看到 <<< 换行。


但我会以不同的方式进行 - 没有 listdir() 但有 os.path.exists()

import os
import shutil

src = 'train'
dst = 't'

os.makedirs(dst, exist_ok=True)  # create destination folder if not exists

filenames = open("file_txt.txt").read().split('\n')

for name in filenames:
    if name:  # to skip empty lines
        fullpath = os.path.join(src, name + '.jpg')
        if os.path.exists(fullpath):
            print('coping:', fullpath)
            shutil.copy(fullpath, dst)
        else:
            print('SKIPING:', fullpath)