GPT写代码-提取当前文件夹内子文件夹中所有内容到当前文件夹及当前文件夹按关键字切片分类文件

665次阅读
没有评论

共计 2282 个字符,预计需要花费 6 分钟才能阅读完成。

分类文件

import os
import ctypes
# 获取当前目录下的所有 mp4 文件
mp4_files = [f for f in os.listdir(".") if f.endswith(".mp4")]
file_count = len(mp4_files)
if file_count == 0:
    ctypes.windll.user32.MessageBoxW(None, "当前目录下不存在 mp4 文件!", "错误", 0x10)
else:
    progress = ctypes.windll.windll.kernel32.CreateFileMappingW(-1, None, 0x04, 0, 4, "mp4_progress")
    progress_ptr = ctypes.windll.kernel32.MapViewOfFile(progress, 0xF001F, 0, 0, 4)
    for index, file in enumerate(mp4_files):
        # 获取文件名中“第”或“篇”字前的部分
        filename = os.path.splitext(file)[0]
        if "第" in filename:
            dirname = filename.split("第")[0]
        elif "篇" in filename:
            dirname = filename.split("篇")[0]
        else:
            continue
        # 新建以 dirname 为名的文件夹
        if not os.path.exists(dirname):
            os.mkdir(dirname)
        # 将当前文件移动到 dirname 文件夹
        os.rename(file, os.path.join(dirname, file))
        # 更新进度条
        percentage = (index + 1) * 100 // file_count
        ctypes.c_long.from_address(progress_ptr).value = percentage
        # 显示提示框
        if percentage < 100:
            ctypes.windll.user32.MessageBoxW(None, f"当前进度:{percentage}%\n 是否完成:否", "提示", 0x40)
        else:
            ctypes.windll.user32.MessageBoxW(None, f"所有文件已成功分类!", "提示", 0x40)
    # 关闭进度条
    ctypes.windll.kernel32.UnmapViewOfFile(progress_ptr)
    ctypes.windll.kernel32.CloseHandle(progress)
print("分组完成!")

请将以上代码复制到记事本中,保存为 分类.py,放在存放 MP4 文件的文件夹中。运行时请确保当前命令行处于该目录下,或者通过 cd 命令切换到该目录下,然后执行 python 分类.py 即可。执行过程中会弹出一个进度提示框,显示当前分类进度以及是否完成。如果不存在“第”或“篇”关键字的文件,会被跳过。分类完成后会在当前目录下生成多个文件夹,每个文件夹内包含相应的 mp4 文件。

提取子文件夹内容

import os
import shutil
# 获取当前 python 代码文件的目录
path = os.path.dirname(os.path.abspath(__file__))
# 获取当前文件夹路径
current_dir = os.getcwd()
# 获取所有子文件夹路径
folders = [os.path.join(path, f) for f in os.listdir(path) if not '.' in f]
# 定义计数器,用于记录操作进度
count = 0
total = sum([len(os.listdir(f)) for f in folders])
# 遍历所有子文件夹
for fdsrc in folders:
    # 获取子文件夹中的所有文件
    srcfiles = [os.path.join(fdsrc, f) for f in os.listdir(fdsrc)]
    # 遍历子文件夹中的所有文件
    for srcf in srcfiles:
        # 获取文件名
        file_name = os.path.basename(srcf)
        # 检查当前文件夹中是否存在同名文件,如果存在则重命名
        if os.path.exists(os.path.join(current_dir, file_name)):
            file_name = os.path.splitext(file_name)[0] + '_副本' + os.path.splitext(file_name)[1]
        # 将文件剪切到当前文件夹下
        shutil.move(srcf, os.path.join(current_dir, file_name))
        # 更新计数器
        count += 1
        # 输出操作进度
        print(f'已完成 {count}/{total} 个文件的提取')
# 删除所有已经提取文件后存在的空文件夹
for subdir, dirs, files in os.walk(current_dir, topdown=False):
    # 删除空文件夹
    if not dirs and not files:
        os.rmdir(subdir)
# 输出操作完成提示
print('所有文件提取完成!')

这段代码会遍历指定文件夹内的所有视频文件,并按照指定的命名格式重命名它们。如果不存在符合命名规则的视频文件,程序会直接跳过并结束。如果存在符合命名规则的视频文件,程序会将它们重命名为 Jellyfin 媒体库能够识别的文件名格式,并输出重命名的过程和结果。请注意,为了实现新的过滤条件,我们需要对文件名进行更复杂的解析和过滤,代码会相应地变得更加复杂。

正文完
 
whatangel
版权声明:本站原创文章,由 whatangel 2023-06-03发表,共计2282字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码