PYTHON:从数组中搜索文件名,然后重新定位文件

时间:2012-11-11 02:29:37

标签: python sorting

我是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)

我的代码在两个地方不起作用。

  1. 我收到一个错误,我需要将一个元组传递给startwith,我不知道该怎么做。我知道元组是什么,但在语法方面我是在黑暗中。

  2. 我对shutil.move不太了解。如果有人知道更好的方法,我会很感激。

  3. 谢谢,

2 个答案:

答案 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]