【问题标题】:Sorting Photos by Filename into Folders in Python在 Python 中按文件名将照片排序到文件夹中
【发布时间】:2020-08-30 10:20:57
【问题描述】:

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

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\\", f),
        os.path.join("C:\\Users\\User\\Projects\\PhotoSort\\sorted\\", folderName),
    )

此时会吐出 FileNotFoundError。

【问题讨论】:

  • 嘿,猎鹰!我们可以看到整个错误,以及它所引用的确切行吗?这样问题就更容易被发现了。
  • 使用os.makedirs递归创建目录,而不是os.makedir

标签: python sorting photo


【解决方案1】:

您的文件夹名称不是有效路径,它只是您必须创建路径的字符串 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),
        )

【讨论】:

    【解决方案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 
        )
    

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 1970-01-01
      • 2022-08-05
      • 2015-02-13
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      相关资源
      最近更新 更多