Python:根据目录中的条件选择和移动文件

时间:2019-05-30 02:10:02

标签: python python-3.x file file-io shutil

我大约有10分钟的视频,并且刚刚提取到每一帧中,所以我的文件夹中有超过100,000个图像,并将它们从1重命名为100,000。现在,我要从1到100,000张图像中每30张中选择1张,然后将它们移动到另一个文件夹。例如:1、31、61、91、121、151、181等。

到目前为止,这是我的代码:

import os
import shutil

PATH = './Folder1/'
DEST = './Folder2/'

file = 1

for file in os.listdir(PATH):
    file = file + 30
    shutil.copyfile(PATH, DEST)

但这给了我以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-b08091703697> in <module>
      9 # Get a list of files in the current working directory
     10 for file in os.listdir(PATH):
---> 11     file = file + 30
     12     shutil.copyfile(PATH, DEST)

TypeError: can only concatenate str (not "int") to str

在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您的错误提示您需要将int转换为str,然后再将它们加在一起。您可以使用

file = file + str(30)

然后稍后改善原始代码。

或者您可以在下面使用我的想法。

for idx in range(1, 100000, 30):
   shutil.copyfile(PATH + str(idx), DEST)    

答案 1 :(得分:0)

尝试以下代码

PATH = '/Folder1/'
DEST = './Folder2/'
l = os.listdir(PATH)
file = 1

for file in l[::30]:
    shutil.copyfile(PATH, DEST)

答案 2 :(得分:0)

for file in os.listdir(PATH)中的

“文件”是字符串,因此file = file + 30无效。 您应该尝试:

import os
import shutil

PATH = './Folder1/'
DEST = './Folder2/'

filenames = os.listdir(PATH)

for i in range(1, len(filenames), 30):
    shutil.copyfile(PATH + filenames[i], DEST)