2017-09-14 11 views
-1

私はこのフォルダにすべての.tifファイルを表示するこのコードを持っています。リスト内のファイルをループして指定したものを移動する(Python)

timestr = datetime.now().strftime('%Y%m%d-%H%M%S%f')  

ex_area_files = [] 
tif_files = glob.glob('C:\\Users\\Bob\\Desktop\\Folder\\' + str(timestr) + '\\EXTRACTED\\*.tif') 
ex_area_files = [tif_files] 
print(ex_area_files) 

どのように特定のものを(別のフォルダに)移動できますか?つまり、width * heightの結果が特定の値よりも小さい/より大きいすべての.tifファイルを移動したいと考えています。

私が試みたのは、配列をループし、コードを設定した後にファイルを移動することでした。すべての結果は、ループは、すべてのシステムを遮断したが失敗した:)

それは...

私もCV2ができますから、ファイルのディレクトリとして ex_area_files(私の.tif配列)を設定するにはどうすればよい
image = cv2.imread('image.jpg') 
height = np.size(image, 0) 
width = np.size(image, 1) 

condition = (height*width) > 9600 

を次の読む?そして、もっと重要なのは、一度にファイルを設定する方法ですか?

条件(320 * 30pxの画像)を満たすファイルは、別のディレクトリに移動する必要があります。どのようにプログラムは、ファイルが移動することを確認した後にそれを行うには?

おかげ

ヒント:これはこのコードの他の部分の後に次のステップです:Exclude images of certain dimensions from process (OpenCV, Python) この場合、ex_area14.pngを見てみましょう。私はそのような一連のファイルを移動したいですが(.tif形式ですが)

+1

- (代わりに\/のようなスラッシュが好き何らかの理由imread.replace()に注意してください)あなたがディレクトリを歩くことを可能にするツール。 [チュートリアル](https://docs.python.org/3/tutorial/index.html)で時間を過ごすことができます。 – wwii

答えて

2

ファイルの移動にはshutilを使うことをお勧めします。あなたはshutil.copy()を使用することができ、それらを移動するには - 私は個人的にshutil.copy2()

を使用するので、このような何かを試してみてください。

import shutil 
    import opencv 

    for files in ex_area_files: 
     if files (PLACE YOUR CONDITION HERE): 
      `shutil.copy('PATH_OF_file', 'PATH_OF_WHERE_TO_DROP') 

EDIT:

だから私個人的にos.walk()のような、ここに私は、ファイルをループしています、ファイルの末尾が.tifの場合は、imreadでファイルを読み取り、高さと幅を取得し、その条件が満たされているかどうかを確認します。ファイルをコピーする場所を指定する必要があります。あなたがドキュメントに目を通す場合、あなたはあなたが終わったり、反復可能なファイルのリストを得るのを助けるためのツールを見つける必要があります

import shutil 
import opencv 
import os 

for root, dirs, files in os.walk(r'FOLDER HERE'): 
    for file in files: 
     if file.lower().endswith('.tif'): 
      image = cv2.imread(root.replace('\\', '/') + '/' +file 
      height = np.size(image, 0) 
      width = np.size(image, 1) 
      if height*width > 9600: 
       shutil.copy(root.replace('\\', '/') + '/' +file, 'PATH_OF_WHERE_TO_DROP') 
+0

ありがとうございます。しかし、どのようにPATH_OF_fileとして配列(条件を満たすフォルダ内のすべてのファイルに対してループ)を使用するのですか? それは複数です。 ありがとうございました – Link

+0

@Link、私は自分のコードを更新しました。私は '.tif'ファイルを持っていないので、あなたの具体例で動作するかどうかは確認できません。注意すべき問題は 'image'が' None'として返ってくるかどうかです。 – MattR

+0

ありがとうございました。私はいくつかの点でテストし、この投稿を更新して返信します。それは、ちょうどそのコピーすべてのTIFファイルを作品 – Link

関連する問題