自动将文件传输到文件夹(OpenCV)

时间:2017-07-20 08:53:30

标签: python opencv path file-transfer expanduser

首先,这是我的代码:

import cv2
import os,errno
from os.path import expanduser
from datetime import datetime
import glob
import numpy as np

##################### Creating folder & subfolders #####################

b_temp_folder = 'b_temp'
c_path = os.path.join('C:\\', b_temp_folder)

try:
    c_dir = os.mkdir(c_path)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

now = datetime.now()

id_folder = now.strftime('%Y%m%d-%H%M%S-%f')
b_path = os.path.join('C:\\b_temp\\',id_folder)
b_dir = os.mkdir(b_path)


##################### Images processing #####################

for img in glob.glob('C:\\Users\\User\\Desktop\\Images\\*.tif'):
    cv_img = cv2.imread(img)
    cv_show = cv2.imshow('img',cv_img)
    cv2.waitKey(0)

在第一部分中,正在创建一些文件夹。首先是'C:\'中的一个文件夹,在其中,是一个以datetime作为名称的文件夹。这些最后一个是在每次执行代码时创建的,因此它们是唯一的(按<毫秒分类。)。

运行for会立即显示所有图片。

以下是问题:如何将每张图片发送到它的唯一文件夹?我的意思是,第一个图像到第一个唯一文件夹,依此类推..

按逻辑顺序,每次运行所有代码时都会创建文件夹(当时是一个文件夹)。相反,图像在同一实例中迭代。 我该怎么修改呢?

P.S - 如您所见,我在C盘中创建了这个 temp 文件夹。我的计划是使这个代码有点跨平台。我尝试了os.path.expanduser,但它似乎无法正常工作。根本没有创建文件夹...有人知道为什么吗?

由于

2 个答案:

答案 0 :(得分:1)

这就是我所做的。代码创建一个主文件夹,主文件夹中的唯一文件夹,并立即传输文件。

import cv2
import os,errno
from os.path import expanduser
from datetime import datetime
import glob
import numpy as np
import shutil


print('\ncreating main folder (temp) - "b_temp" IN C: \n')

b_temp_folder = 'b_temp'
c_path = os.path.join('C:\\', b_temp_folder)

try:
    c_dir = os.mkdir(c_path)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

print('creating unique folder in main folder - "id_folder" IN "b_temp" \n')


now = datetime.now()

id_folder = now.strftime('%Y%m%d-%H%M%S-%f')
b_path = os.path.join('C:\\b_temp\\',id_folder)
b_dir = os.mkdir(b_path)


print('moving image to unique folder \n')


idx = 0
for img in glob.glob('C:\\Users\\User\\Desktop\\Images\\' + str(idx) + '*.tif'):
    cv_img = cv2.imread(img)
idx+=1

shutil.move(img, b_path)

现在,有人知道如何使所有代码更具跨平台性吗?我把所有文件放在C:\中,但它似乎不是一个好的解决方案...

答案 1 :(得分:0)

我建议在for循环中创建文件夹。您可以一次访问一个图像和一个文件夹(如果这是我从您的描述中理解的那样)。

for img in glob.glob('C:\\Users\\User\\Desktop\\Images\\*.tif'):
    cv_img = cv2.imread(img)
    cv_show = cv2.imshow('img',cv_img)
    now = datetime.now()
    id_folder = now.strftime('%Y%m%d-%H%M%S-%f')
    b_path = os.path.join('C:\\b_temp\\',id_folder)
    b_dir = os.mkdir(b_path)
    shutil.move(img, 
              b_path)

更新了代码。 'img'路径中的图像文件将存储在b_path中。它对我有用。