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

2024-04-19 06:34:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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. 我不太了解舒蒂尔。快走. 如果有人知道更好的方法,我会很感激的。

谢谢


Tags: 代码图像ifos图片rootfilesusers
2条回答

从这里开始。在

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个文件。

  • 如果需要获取每个260th.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]

要将目录中的每个第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)

相关问题 更多 >