Simlie 发表于 2023-11-19 17:45

关于用pycham编写自动生成文件夹

想实现自动收纳的功能,目前只实现了后缀001的能够生成,我不知道是不是我的思路有问题

修改前
修改后


但是我想实现的是完整的收纳,把相同的图片都保存在一个文件夹下,请大佬有提修改意见的吗


期望图


完整代码:

import os
import shutil

# 源图片文件夹路径
source_folder = "C:\\Vido"
def remove_last_whitespace_in_folder(folder_path):
    # 遍历文件夹下的所有文件
    for file_name in os.listdir(folder_path):
      # 获取文件路径
      file_path = os.path.join(folder_path, file_name)

      # 检查是否是图片文件
      if os.path.isfile(file_path) and file_name.lower().endswith(('.jpg', '.jpeg', '.png', '.gif')):
            # 获取图片名字和扩展名
            image_name, ext = os.path.splitext(file_name)

            # 去除名字中最后一个空白符
            last_non_whitespace_index = len(image_name) - 1
            while last_non_whitespace_index >= 0 and image_name[last_non_whitespace_index.isspace():
                last_non_whitespace_index -= 1

            new_image_name = image_name[:last_non_whitespace_index + 1]

            # 生成新的文件路径
            new_file_path = os.path.join(folder_path, new_image_name + ext)

            # 重命名文件
            os.rename(file_path, new_file_path)

# 示例文件夹路径
folder_path = "C:\\Vido"

# 去除文件夹下的图片名字中最后一个空白符
remove_last_whitespace_in_folder(folder_path)

# 遍历源文件夹中的所有文件
for filename in os.listdir(source_folder):
    if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):# 判断文件是否为图片
      if "001" in filename:
            # 创建以文件名命名的文件夹
            folder_name = os.path.splitext(filename)[0]
            os.makedirs(os.path.join(source_folder, folder_name), exist_ok=True)

            # 移动图片文件到新创建的文件夹中
            source_path = os.path.join(source_folder, filename)
            destination_path = os.path.join(source_folder, folder_name, filename)
            shutil.move(source_path, destination_path)

      if "00" not in filename:# 判断文件名是否不包含 "00"
      # 创建以文件名命名的文件夹
            folder_name = os.path.splitext(filename)[0]
            os.makedirs(os.path.join(source_folder, folder_name), exist_ok=True)

      # 移动图片文件到新创建的文件夹中
            source_path = os.path.join(source_folder, filename)
            destination_path = os.path.join(source_folder, folder_name, filename)
            shutil.move(source_path, destination_path)




新人,不太会表达,望谅解。

侃遍天下无二人 发表于 2023-11-19 17:59

先定义下啥叫相同的图片,是同一天内的还是文件内容完全一致的

一只大菜猫 发表于 2023-11-19 18:27

你这个需求都不是看的很清楚啊

KirchoffNZ 发表于 2023-11-19 18:34

需求是:一个文件名对应一个文件夹名?

Simlie 发表于 2023-11-19 18:37

一只大菜猫 发表于 2023-11-19 18:27
你这个需求都不是看的很清楚啊

大致就是根据图片的名称自动生成文件夹,已经实现了单张图片(不含001,002...的那种)生成文件夹,对于同一种文案多张照片的我只能实现创建后缀名是001的文件夹,剩下的002,003...我得自己手动放入后缀是001的文件夹,所以不知道怎么写后续代码

Simlie 发表于 2023-11-19 18:40

侃遍天下无二人 发表于 2023-11-19 17:59
先定义下啥叫相同的图片,是同一天内的还是文件内容完全一致的

对于(哈哈哈.png)这样是单个的图片能实现创建文件夹,但是(嘿嘿嘿001.png,嘿嘿嘿002.png,...)这样的,我只能实现以第一个名称来创建文件夹,剩下的我得手动放(以”嘿嘿嘿001“为名称的文件夹)里进去

skybird 发表于 2023-11-19 19:28

侃遍天下无二人 发表于 2023-11-19 17:59
先定义下啥叫相同的图片,是同一天内的还是文件内容完全一致的

需求描述不精确,不好判断

277249 发表于 2023-11-19 19:39

侃遍天下无二人 发表于 2023-11-19 19:49

Simlie 发表于 2023-11-19 18:40
对于(哈哈哈.png)这样是单个的图片能实现创建文件夹,但是(嘿嘿嘿001.png,嘿嘿嘿002.png,...)这样 ...

虽然还不是很清楚你的规则,但你可以按这个思路试试:

遍历当前目录,按你的规则对文件名进行映射(这一步抽取为函数),然后若映射名对应的目录不存在,则将映射名创建为目录,接下来将这个文件移到映射目录中

Simlie 发表于 2023-11-19 20:25

KirchoffNZ 发表于 2023-11-19 18:34
需求是:一个文件名对应一个文件夹名?

对,但是会有一个地方会有多个照片的(像你去故宫旅游会拍很多照片),我会命名图片名后缀会加上001,002来保存,但是创建文件夹我希望能放进同一个文件夹
页: [1] 2
查看完整版本: 关于用pycham编写自动生成文件夹