【问题标题】:How to copy image in a folder using its name from a file如何使用文件中的名称复制文件夹中的图像
【发布时间】:2021-12-28 17:01:29
【问题描述】:

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

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 条件但什么也没有得到的 print(line),而 file_txt 包含图像的名称,而 train 是一个包含图像本身的文件夹

【问题讨论】:

  • 您只能阅读lines 一次——在所有for-loop 之前。您还必须记住,它可能会在最后给出带有\n 的行,因此您可能需要使用line.strip()。如果您有空行,那么您可以跳过它们并仅在 if line: ... 时运行
  • 首先您可以使用print() 来查看您在变量中真正拥有的内容以及执行了哪部分代码 - 它被称为"print debuging"
  • 可能从文件中获取文件名,创建/full/path/to/image.jpg,然后使用os.path.exists(...)检查它是否存在,然后复制它。这样你就不需要listdir(),也不需要嵌套的for-loops。
  • 如果您将文件读取为f = open(...).read().split("\n"),那么您将获得没有\n' 的名称,并且您可以在没有for line in lines: if line == j: 的情况下检查if j in f:
  • 您的思维问题可能是您尝试在没有.jpg 的情况下复制COCO_train2014_000000110431,但您必须复制COCO_train2014_000000110431.jpg

标签: python python-3.x directory


【解决方案1】:

你的代码很乱,但我认为你的问题是你尝试复制 COCO_train2014_000000110431 而没有 .jpg 但你必须复制 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)

【讨论】:

  • 非常感谢并感谢您的帮助
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 2021-11-02
  • 2018-11-30
  • 2013-04-12
  • 2014-09-02
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多