按文件名将照片分类到 Python 中的文件夹中
Sorting Photos by Filename into Folders in 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\", f),
os.path.join("C:\Users\User\Projects\PhotoSort\sorted\", folderName),
)
此时出现 FileNotFoundError。
利用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
)
您的文件夹名称不是有效路径,它只是一个字符串,您必须将路径创建为
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),
)
我正在尝试按名称将文件夹中的照片分类到同名文件夹中。
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(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
)
您的文件夹名称不是有效路径,它只是一个字符串,您必须将路径创建为 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),
)