2017-07-20 19 views
1

まず、ここで私が持っているコードです:自動転送ファイル

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を実行すると、すべての画像が一度に表示されます。

ここに質問です。どの画像をどのようにして一意のフォルダに送ることができますか?つまり、最初のユニークなフォルダへの最初のイメージなど。

ロジックで行くと、すべてのコードが実行されるたびにフォルダが作成されます(1つのフォルダがその時に作成されます)。代わりに、画像はすべて同じインスタンス内で反復されます。 これを変更するにはどうすればよいですか?

P.S - ご覧のとおり、tempフォルダをCドライブに作成しました。私の計画は、このコードを少しクロスプラットフォームにすることでした。私はos.path.expanduserを試しましたが、うまくいかないようです。フォルダはまったく作成されません...なぜ誰かが知っていますか?

おかげ

答えて

0

私はループ自体のためにフォルダを作成することをお勧め。一度に1つのイメージにアクセスできます(これが私の説明で分かっている場合)。

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に保存されます。それは私のために働いた。

+0

はい、作成されたすべてのフォルダに対して1つのイメージです。しかし、コードは動作していないようです... cv_showはフォルダではなく、画像を表示するだけのものです。 – BlueTrack

+0

まだ動作しません。私はほぼすべてを変えなければならないと思う...解決策は、カウンターを置いてイメージを一度に行うことで、プログラムを実行するたびに1回行うことができます。その後、コードを呼び出すメインを実行し、フォルダ内の画像と同じ回数だけ繰り返します。 – BlueTrack

+0

コードを更新しました。これは私のために働いた。 plsはそれを撃つ。 – gB08

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:\に入れますが、それは良い解決策ではないようです...

関連する問題