所以基本上,你想做的事情是:
- 找到给定文件夹中的每个文件
- 获取每个文件名的第一部分并将其用作文件夹名称
- 如果该文件夹不存在,则创建它
- 将文件移动到该文件夹中
- 重复
很好!弄清楚我们想要做什么已经是成功的一半了--现在,主要是通过搜索引擎找到答案并将其转化为代码。
首先,我们需要检查的文件夹:
folder_path = "myfolder"
现在,我们希望找到该文件夹中的每个文件。快速的搜索会得到
这篇文章:
import os
import os.path
images = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
作为一个附注,我将经常使用`os.path.join`,你可能想简单了解一下它的作用。在评论中提供的指南已经很好地涵盖了它。
现在,我们想要每个名称的第一部分。假设我们将处理第一个破折号之前的所有内容作为文件夹名称,并忽略其余部分。一种方法是使用`string.split`,它将字符串按给定的字符分割成一个字符串列表,并获取第一个元素:
for image in images:
folder_name = image.split('-')[0]
现在,如果那个文件夹不存在,我们要创建它。再次,谷歌是我们的朋友:
new_path = os.path.join(folder_path, folder_name)
if not os.path.exists(new_path):
os.makedirs(new_path)
最后,我们将原始图像
移动:
import shutil
old_image_path = os.path.join(folder_path, image)
new_image_path = os.path.join(new_path, image)
shutil.move(old_image_path, new_image_path)
将所有内容综合起来:
import os
import os.path
import shutil
folder_path = "test"
images = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
for image in images:
folder_name = image.split('-')[0]
new_path = os.path.join(folder_path, folder_name)
if not os.path.exists(new_path):
os.makedirs(new_path)
old_image_path = os.path.join(folder_path, image)
new_image_path = os.path.join(new_path, image)
shutil.move(old_image_path, new_image_path)