鱼C论坛

 找回密码
 立即注册
查看: 1544|回复: 2

[已解决]文件归集问题

[复制链接]
发表于 2023-10-9 11:53:38 | 显示全部楼层 |阅读模式
60鱼币
文件需要归集,路径为“Z:\1\2\4K\待分”,文件存于各个文件夹中,格式为“.mp4",每个文件夹里都有文件的描述文本“新建文本文档.txt”,根据文本中的一个属性“出演者”,在另外一个位置"Z:\1\2\4K\",新建以该属性命名的文件夹,并将文件移入其中,比如文件的属性为“出演者:大白”,则在对应位置新建文件夹“大白”,该属性位于描述文件”新建文本文档.txt"的第4行,如何实现

以下是用百度AI助手的问答:
屏幕截图 2023-10-09 114535.png

描述文本是这样的:
屏幕截图 2023-10-09 115141.png
最佳答案
2023-10-9 11:53:39
根据您的描述,您需要将位于路径 "Z:\1\2\4K\待分" 下的文件归集到另一个位置 "Z:\1\2\4K\"。归集的目标位置是以文件描述文本中的属性 "出演者" 命名的文件夹。

以下是实现这个功能的Python代码:
import ossource_dir = r"Z:\1\2\4K\待分"target_dir = r"Z:\1\2\4K"# 遍历源文件夹for root, dirs, files in os.walk(source_dir):    for file in files:        if file.endswith(".mp4"):            # 读取文件描述文本            description_path = os.path.join(root, "新建文本文档.txt")            if not os.path.exists(description_path):                continue            with open(description_path, "r") as f:                lines = f.readlines()                # 获取属性行的内容                performer_line = next((line for line in lines if line.startswith("出演者")), None)                        if performer_line is not None:                performer = performer_line.split(":")[1].strip()                # 根据属性创建目标文件夹                performer_dir = os.path.join(target_dir, performer)                os.makedirs(performer_dir, exist_ok=True)                source_file_path = os.path.join(root, file)                target_file_path = os.path.join(performer_dir, file)                # 移动文件到目标文件夹                os.rename(source_file_path, target_file_path)
请将代码中的 source_dirtarget_dir 修改为实际的路径。

这段代码使用了 os.walk() 函数来遍历源文件夹中的文件和子文件夹。对于每个文件,它会首先判断文件是否以 ".mp4" 结尾,如果是,则读取对应的文件描述文本。然后,在描述文本中找到属性行 "出演者",提取出属性的值。接下来,根据属性的值创建目标文件夹,并将文件移动到目标文件夹中。

注意,通过 os.makedirs(performer_dir, exist_ok=True) 创建目标文件夹时,设置 exist_ok=True 可以避免在目标文件夹已存在的情况下产生错误。

希望这个代码可以帮助到您。如有需要,请根据实际情况进行调整。

球一个最佳答案谢谢啦!这对我非常重要!
屏幕截图 2023-10-09 114535.png
屏幕截图 2023-10-09 115141.png

最佳答案

查看完整内容

根据您的描述,您需要将位于路径 "Z:\1\2\4K\待分" 下的文件归集到另一个位置 "Z:\1\2\4K\"。归集的目标位置是以文件描述文本中的属性 "出演者" 命名的文件夹。 以下是实现这个功能的Python代码: 请将代码中的 source_dir 和 target_dir 修改为实际的路径。 这段代码使用了 os.walk() 函数来遍历源文件夹中的文件和子文件夹。对于每个文件,它会首先判断文件是否以 ".mp4" 结尾,如果是,则读取对应的文件描述文本。然后,在 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-9 11:53:39 | 显示全部楼层    本楼为最佳答案   
根据您的描述,您需要将位于路径 "Z:\1\2\4K\待分" 下的文件归集到另一个位置 "Z:\1\2\4K\"。归集的目标位置是以文件描述文本中的属性 "出演者" 命名的文件夹。

以下是实现这个功能的Python代码:
import ossource_dir = r"Z:\1\2\4K\待分"target_dir = r"Z:\1\2\4K"# 遍历源文件夹for root, dirs, files in os.walk(source_dir):    for file in files:        if file.endswith(".mp4"):            # 读取文件描述文本            description_path = os.path.join(root, "新建文本文档.txt")            if not os.path.exists(description_path):                continue            with open(description_path, "r") as f:                lines = f.readlines()                # 获取属性行的内容                performer_line = next((line for line in lines if line.startswith("出演者")), None)                        if performer_line is not None:                performer = performer_line.split(":")[1].strip()                # 根据属性创建目标文件夹                performer_dir = os.path.join(target_dir, performer)                os.makedirs(performer_dir, exist_ok=True)                source_file_path = os.path.join(root, file)                target_file_path = os.path.join(performer_dir, file)                # 移动文件到目标文件夹                os.rename(source_file_path, target_file_path)
请将代码中的 source_dirtarget_dir 修改为实际的路径。

这段代码使用了 os.walk() 函数来遍历源文件夹中的文件和子文件夹。对于每个文件,它会首先判断文件是否以 ".mp4" 结尾,如果是,则读取对应的文件描述文本。然后,在描述文本中找到属性行 "出演者",提取出属性的值。接下来,根据属性的值创建目标文件夹,并将文件移动到目标文件夹中。

注意,通过 os.makedirs(performer_dir, exist_ok=True) 创建目标文件夹时,设置 exist_ok=True 可以避免在目标文件夹已存在的情况下产生错误。

希望这个代码可以帮助到您。如有需要,请根据实际情况进行调整。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-9 11:54:24 | 显示全部楼层
这个问题需要编写一个程序来实现。可以使用Python中的os和shutil模块来操作文件和文件夹。

首先,需要遍历“Z:\1\2\4K\待分”路径下的所有文件夹,找到每个文件夹中的描述文本“新建文本文档.txt”,并读取其中的属性“出演者”。

然后,需要在“Z:\1\2\4K\”路径下新建以该属性命名的文件夹,可以使用os模块的mkdir函数来实现。

最后,将该文件夹中的所有“.mp4”格式的文件移动到新建的文件夹中,可以使用shutil模块的move函数来实现。

以下是实现该功能的Python代码示例:
import os
import shutil

source_dir = r'Z:\1\2\4K\待分'
target_dir = r'Z:\1\2\4K\'

for foldername, subfolders, filenames in os.walk(source_dir):
    for filename in filenames:
        if filename == '新建文本文档.txt':
            with open(os.path.join(foldername, filename), 'r', encoding='utf-8') as f:
                lines = f.readlines()
                for line in lines:
                    if line.startswith('出演者:'):
                        actor = line.strip().replace('出演者:', '')
                        target_folder = os.path.join(target_dir, actor)
                        if not os.path.exists(target_folder):
                            os.mkdir(target_folder)
                        for mp4_file in filenames:
                            if mp4_file.endswith('.mp4'):
                                shutil.move(os.path.join(foldername, mp4_file), os.path.join(target_folder, mp4_file))

该代码会遍历“Z:\1\2\4K\待分”路径下的所有文件夹,找到每个文件夹中的描述文本“新建文本文档.txt”,并读取其中的属性“出演者”。然后,它会在“Z:\1\2\4K\”路径下新建以该属性命名的文件夹,并将该文件夹中的所有“.mp4”格式的文件移动到新建的文件夹中。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
quffoon + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表