2017-09-14 64 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) 

我該如何移動一些指定的(到另一個文件夾)?我的意思是,我想移動寬度*高度小於/大於某個值的所有.tif文件。

我試過的是循環訪問數組,然後在設置密碼之後移動文件。所有的結果是一個環失敗,從而封鎖了所有的系統:)

它遵循...

image = cv2.imread('image.jpg') 
height = np.size(image, 0) 
width = np.size(image, 1) 

condition = (height*width) > 9600 

哪有我還設置ex_area_files(我的.tif陣列)的文件的目錄從中可以CV2閱讀?而且,更重要的是,如何立即設置文件?

滿足條件的文件(值爲320 * 30px的圖像)應移至另一個目錄。程序確定文件可以移動後如何執行?

由於

提示:這是這個其他代碼段之後的下一個步驟:Exclude images of certain dimensions from process (OpenCV, Python) 在這種情況下,看看ex_area14.png。我想移動一系列類似的文件(但採用.tif格式..)

+1

如果你去翻資料,你會發現工具來幫助你獲得的文件列表,你可以遍歷甚至工具,讓你走過目錄。您可能需要花一些時間在[教程](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') 

編輯:

所以,我個人很喜歡os.walk(),在這裏,我通過循環的文件,如果文件以.tif結尾,我將用imread讀取文件的高度和寬度,並檢查是否符合條件。您必須提供您要將文件複製到的位置。 (請注意的.replace() - 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

謝謝。對於shutil似乎沒問題..但是如何將一個數組(作爲滿足條件的文件夾中的每個文件循環)用作PATH_OF_file? 這是多個.. 謝謝 – Link

+0

@Link,我更新了我的代碼。我沒有'.tif'文件,因此我無法檢查它是否適用於您的具體示例。要注意的問題是如果'image'返回爲'None'。 – MattR

+0

非常感謝。我會在幾個測試中,會更新這個帖子並回復。 – Link