为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中按文件名将照片排序到文件夹中

在 Python 中按文件名将照片排序到文件夹中

慕运维8079593 2023-07-05 15:44:50
我正在尝试按名称将文件夹中的照片排序到同名的文件夹中。project/photos_to_sort/IMG_20200101_001.jpgIMG_20200101_002.jpgIMG_20200103_001.jpgIMG_20200207_001.jpgIMG_20200207_002.jpgIMG_20200207_003.jpg脚本应创建 3 个文件夹,名称分别为:20200101、20200103、20200207,然后将照片放入正确的文件夹中。project/sorted/20200101/IMG_20200101_001.jpgIMG_20200101_002.jpgproject/sorted/20200103/IMG_20200103_001.jpgproject/sorted/20200207/IMG_20200207_001.jpgIMG_20200207_002.jpgIMG_20200207_003.jpg到目前为止,这是我的代码,但我似乎可以让它工作:import osimport shutil# Input absolute path to PhotoSort program.os.chdir("C:\\Users\\User\\Projects\\PhotoSort")for f in os.listdir("photos_to_sort"):    folderName = f[4:12]if os.path.exists(folderName):    shutil.copy(        os.path.join("C:\\Users\\User\\Projects\\PhotoSort\\", f),        os.path.join("C:\\Users\\User\\Projects\\PhotoSort\\sorted\\", folderName),    )else:    os.mkdir(folderName)    shutil.copy(        os.path.join("C:\\Users\\User\\Projects\\PhotoSort\\", f),        os.path.join("C:\\Users\\User\\Projects\\PhotoSort\\sorted\\", folderName),    )此时会抛出 FileNotFoundError 错误。
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您的folderName不是有效的路径,它只是一个字符串,您必须将路径创建为 sorted/folderName,正如您所提到的。而且您的照片位于photos_to_sort文件夹中,并且您正在使用根文件夹。


当您使用相对路径设置绝对路径时,事情会变得更简单并且也适用于其他计算机。


最佳实践是使用 os.path.join 创建路径,因为它根据底层操作系统创建路径,以便您的脚本可以在 Windows 和 Linux/Unix 上运行


下面是工作代码


import os

import shutil



# Input absolute path to PhotoSort program.

os.chdir("C:\\Users\\User\\Projects\\PhotoSort")



for f in os.listdir("photos_to_sort"):

    folderName = f[4:12]


    if os.path.exists(os.path.join("sorted", folderName)):

        shutil.copy(

            os.path.join(

                "photos_to_sort", f),

            os.path.join(

                "sorted", folderName),

        )

    else:

        os.makedirs(os.path.join(

            "sorted", folderName))

        shutil.copy(

            os.path.join(

                "photos_to_sort", f),

            os.path.join(

                "sorted", folderName),

        )


查看完整回答
反对 回复 2023-07-05
?
DIEA

TA贡献1820条经验 获得超2个赞

利用os.makedirs(folder_name, exist_ok=True)


仅当目录不存在时才会创建该目录。然后,您可以在 for 循环中使用shutil copy 命令以及上述函数来完成这项工作。另外,检查 if 条件的位置。


dest_path = "C:\\Users\\User\\Projects\\PhotoSort\\sorted\\"


for f in sorted(os.listdir("photos_to_sort")):

    folderName = f[4:12]

    dest_img_folder = os.path.join(dest_path,folderName)

    os.makedirs(dest_img_folder,exist_ok=True)

    shutil.copy(

        os.path.join("C:\\Users\\User\\Projects\\PhotoSort\\", f),

        os.path.join(dest_img_folder,f), # also specify the absolute file path 

    )


查看完整回答
反对 回复 2023-07-05
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信