1

我是 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. 我收到一个错误,我需要将一个元组传递给startswith,我不知道该怎么做。我知道元组是什么,但就语法而言,我一无所知。

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

谢谢,

4

2 回答 2

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)
于 2012-11-11T03:40:54.190 回答
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)
  • 我已更改filesfilename. 在循环内部,filename是一个字符串:目录中单个文件的名称。

  • 我使用enumerate,它为我们提供了文件名和从 0 开始的计数器。尝试print enumerate(['cat', 'dog', 'pig'])在 shell 中执行类似操作以查看它的作用。

  • 现在我们有了一个计数器,我使用测试 i%260 == 0 只选择第 260 个文件。

  • 如果您需要获取每 260 个 .jpg 文件,请将 if 语句更改为if i%260==0 and filename.endswith('.jpg')

  • 我不知道你想用它做什么startswith,但如果你想使用它,你需要传递一个字符串作为参数,而不是一个元组。

  • print selectPhotos[::260]实际上并没有改变 selectPhotos。在这种情况下您可能实际上并不需要它,但对于将来......您可以传递一个 step 值来range喜欢这个selectPhotos = range(0,213921,260)或在创建它后更改 selectPhotos,使用selectPhotos = selectPhotos[::260]

于 2012-11-11T03:36:40.847 回答