微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决按文件名将照片排序到Python中的文件夹

我正在尝试按名称文件夹中的照片分类到同名文件夹中。

project/photos_to_sort/
IMG_20200101_001.jpg
IMG_20200101_002.jpg
IMG_20200103_001.jpg
IMG_20200207_001.jpg
IMG_20200207_002.jpg
IMG_20200207_003.jpg

脚本应创建3个文件夹,名称分别为:20200101、20200103、20200207,然后将照片放入正确的文件夹中。

project/sorted/20200101/
IMG_20200101_001.jpg
IMG_20200101_002.jpg
project/sorted/20200103/
IMG_20200103_001.jpg
project/sorted/20200207/
IMG_20200207_001.jpg
IMG_20200207_002.jpg
IMG_20200207_003.jpg

到目前为止,这是我的代码,但我似乎可以使其正常工作:

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(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\\",)

这会立即弹出FileNotFoundError。

解决方法

您的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",)
,

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

仅当目录不存在时,它将创建目录。然后,您可以在for循环中使用shutil copy命令以及以上功能来完成这项工作。另外,请检查条件条件的位置。

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\\",os.path.join(dest_img_folder,# also specify the absolute file path 
    )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。