我是 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)
我的代码在两个地方无法运行。
您的代码遇到的问题可以通过一些调整来解决,下面是您代码中的两个主要问题和解决方案:
startswith
startswith 需要一个字符串或者一个元组作为参数。如果您希望检查文件名是否是从 selectPhotos 列表中的某个数字开始的,您可以通过将 selectPhotos 转换为元组来解决这个问题。
selectPhotos
但是,selectPhotos 是一个范围(range(260, 213921)),并且您实际上需要的是数字序列。您需要使用 startswith 来检查文件名是否以这些数字中的某个数字开头。为此,可以直接将数字作为元组传递给 startswith。
range(260, 213921)
例如,假设您希望根据文件名的前几个字符来过滤图像。可以将 selectPhotos 转换为字符串并进行匹配:
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 # 找到匹配的数字后,退出内层循环
startswith(str(num))
num
os.path.join()
shutil.move(src_path, dst_path)
希望这段代码能帮到您!如果您有更多问题,随时告诉我。