小能豆

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

py

我是 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不太了解。如果有人知道更好的方法,我将不胜感激。

阅读 20

收藏
2024-12-05

共1个答案

小能豆

您的代码遇到的问题可以通过一些调整来解决,下面是您代码中的两个主要问题和解决方案:

1. startswith 方法错误:

startswith 需要一个字符串或者一个元组作为参数。如果您希望检查文件名是否是从 selectPhotos 列表中的某个数字开始的,您可以通过将 selectPhotos 转换为元组来解决这个问题。

但是,selectPhotos 是一个范围(range(260, 213921)),并且您实际上需要的是数字序列。您需要使用 startswith 来检查文件名是否以这些数字中的某个数字开头。为此,可以直接将数字作为元组传递给 startswith

例如,假设您希望根据文件名的前几个字符来过滤图像。可以将 selectPhotos 转换为字符串并进行匹配:

2. shutil.move() 的使用:

shutil.move() 的第一个参数是源路径,第二个参数是目标路径。您应该使用正确的路径来移动文件。

修改后的代码:

import os
import shutil

# 设置源目录和目标目录
root = '/Users/Desktop/spaceOddy/'  # 源目录
dst = "/Users/Desktop"  # 目标目录

# 创建一个数字范围(例如:260, 520, 780, ...)
selectPhotos = range(260, 213921, 260)

# 打印选中的图像文件名范围
print("/////// F I N D__A L L__F I L E S __W I T H I N __R A N G E ///////////////////")
print(selectPhotos)

# 遍历源目录中的所有文件
for files in os.listdir(root):
    # 检查文件是否是 JPG 文件,您可以根据需要取消注释
    # if files.endswith(".jpg"):
    #     print(files)

    # 检查文件名是否以数字列表中的某个数字开头
    for num in selectPhotos:
        if files.startswith(str(num)):  # 将数字转换为字符串并进行匹配
            print(f"Moving {files}...")

            # 生成源文件路径和目标路径
            src_path = os.path.join(root, files)
            dst_path = os.path.join(dst, files)

            # 移动文件到新目录
            shutil.move(src_path, dst_path)
            break  # 找到匹配的数字后,退出内层循环

解释:

  1. 数字匹配: 使用 startswith(str(num))num 转换为字符串并检查文件名是否以该数字开头。这会确保您能找到每 260 张图像的文件。
  2. 路径拼接: 使用 os.path.join() 来安全地拼接文件路径,这样可以避免操作系统路径分隔符的问题。
  3. shutil.move() 使用: shutil.move(src_path, dst_path) 将源文件移动到目标文件夹。

其他建议:

  • 性能: 如果文件夹中有非常多的文件,可以考虑进一步优化代码,比如一次性处理所有符合条件的文件。
  • 调试: 运行时可以打印每个文件的路径,确认移动操作是否正确执行。

希望这段代码能帮到您!如果您有更多问题,随时告诉我。

2024-12-05