循环遍历列表中的文件并移动指定的文件(Python)

问题描述:

我有这段代码可以显示我给出的文件夹中的所有.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

我推荐使用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