我是Python的新手,可以真正使用一些帮助。我有大量的图像,我正在整理。我需要每260个图像(例如:0,260,520,780等)。然后我需要将这些图像重新定位到一个新文件夹。到目前为止,这是我的代码:
import os, os.path, sys, shutil
root = '.'
dst = "/Users/Desktop"
print "/////// F I N D__A L L__F I L E S __W I T H I N __R A N G E ///////////////////"
selectPhotos = range(260, 213921)
print selectPhotos[::260]
print "/////// L I S T__O F __A L L __J P E G S ///////////////////"
for files in os.listdir("/Users/Desktop/spaceOddy/"):
#if files.endswith(".jpg"):
# print files
if files.startswith(selectPhotos[]):
print files
shutil.move ("files", root)
我的代码在两个地方不起作用。
我收到一个错误,我需要将一个元组传递给startwith,我不知道该怎么做。我知道元组是什么,但在语法方面我是在黑暗中。
我对shutil.move不太了解。如果有人知道更好的方法,我会很感激。
谢谢,
答案 0 :(得分:2)
将目录中的每个第n个图像文件移动到另一个目录:
#!/usr/bin/env python
from __future__ import print_function
import glob
import shutil
import sys
dstdir = "/Users/Desktop"
for file in glob.glob("/Users/Desktop/spaceOddy/*.jpg")[::260]:
try:
shutil.move(file, dstdir)
except EnvironmentError as e:
print("can't move {}, error {}".format(file, e), file=sys.stderr)
答案 1 :(得分:1)
从这里开始。
import os, shutil
root = '.'
src = "/Users/Desktop/spaceOddy/"
dst = "/Users/Desktop"
for i, filename in enumerate(os.listdir(src)):
if i%260 == 0:
print filename
shutil.move (src + filename, root)
我已将files
更改为filename
。在循环内部,filename
是一个字符串:目录中单个文件的名称。
我使用了enumerate
,它给我们提供了一个文件的名称和一个从0开始的计数器。在shell中尝试类似print enumerate(['cat', 'dog', 'pig'])
的内容来查看它的作用。
现在我们有了一个计数器,我使用了测试i%260 == 0来只选择第260个文件。
如果您需要获取每个第260个.jpg文件,请将if语句更改为if i%260==0 and filename.endswith('.jpg')
我不知道你试图用startswith
做什么,但如果要使用它,你需要传递一个字符串作为参数,不是一个元组。
print selectPhotos[::260]
实际上并没有改变selectPhotos。在这种情况下,您可能实际上并不需要它,但是对于将来......您可以将步骤值传递给range
selectPhotos = range(0,213921,260)
,或者在创建后更改selectPhotos,使用selectPhotos = selectPhotos[::260]