吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 753|回复: 12
收起左侧

[已解决] python文件分类无效

[复制链接]
dft2010 发表于 2023-3-1 00:14
本帖最后由 dft2010 于 2023-3-1 21:58 编辑

经常下电视剧,但下载软件不能自动根据剧集分类,所以会有很多剧集混搭在一起,需要根据剧集名,把同一个电视剧分类建文件夹归档,不知道下面的代码为什么不行,请大佬帮忙看一下,谢谢 QQ截图20230301001218.png
[Python] 纯文本查看 复制代码
import os一下
import shutil

current_path = os.getcwd()
print('当前目录:'+current_path)

filename_list = os.listdir(current_path)
print('当前目录下文件:',filename_list)

print('正在分类整理进文件夹ing...')
for filename in filename_list:
    try:
        name1, name2 = filename.split('.')
        if name2 == 'mp4' or name2 == 'mkv':
            try:
                os.mkdir(name1[:-1])
                print('创建文件夹'+name1[:-1])
            except:
                pass
            try:
                shutil.move(current_path+'\\'+filename,current_path+'\\'+name1[:-1])
                print(filename+'转移成功!')
            except Exception as e:
                print('移动失败:' + e)
    except:
        pass

print('整理完毕!')
input()

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
zckiszj + 1 + 1 用心讨论,共获提升!
为之奈何? + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

youth96 发表于 2023-3-1 00:18
本帖最后由 youth96 于 2023-3-1 00:29 编辑

filename.split('.') 之后是一个list ,不存在name1,name2

name1 = filename.rsplit('.',1)[0]
name2 = filename.rsplit('.',1)[1]
大概这样,你可以试试


至于分类 简单点应该匹配第字前面的字节吧,而不是name1[:-1]


下面代码没有验证,应该没错


[Python] 纯文本查看 复制代码
import os
import shutil
 
current_path = os.getcwd()
print('当前目录:'+current_path)
 
filename_list = os.listdir(current_path)
print('当前目录下文件:',filename_list)
 
print('正在分类整理进文件夹ing...')
for filename in filename_list:
    try:
        name1 = filename.rsplit('.',1)[0]
        name2 = filename.rsplit('.',1)[1]
        if name2 == 'mp4' or name2 == 'mkv':
            file_path = name1.split('第')[0]
            if not os.path.exists(file_path):
                os.mkdir(file_path)
                print('创建文件夹'+file_path)
            try:
                shutil.move(current_path+'\\'+filename,current_path+'\\'+file_path)
                print(filename+'转移成功!')
            except Exception as e:
                print('移动失败:' + e)
    except:
        pass
 
print('整理完毕!')
input()
zzzzxcv 发表于 2023-3-1 02:17
因为name1依次是:大考第1集、大考第2集、大考第3集、、、,切片name1[:-1]得到的依次是:大考第1、大考第2、大考第3、、、,并没有提取出电视剧名字,所以每次都会创建一个新的文件夹。
ysjd22 发表于 2023-3-1 07:08
lypxynok 发表于 2023-3-1 08:33
学习了,谢谢分享
archer0258 发表于 2023-3-1 09:11
[Python] 纯文本查看 复制代码
from pathlib import Path
import shutil

# 文件所在文件夹
p = Path(__file__).parent

# 遍历文件夹
for f in p.glob('*.*'):
    # 排除自身
    if f.suffix != ".py":
        # 如果所有文件都是以第分割的
        name = p / f.stem.split('第')[0]
        # 创建文件夹
        name.mkdir(exist_ok=True)
        # 移动
        shutil.move(f, name)
TWYX 发表于 2023-3-1 09:47
帮你问了下chatGPT,仅供参考。
这段代码主要是用来将当前目录下的MP4和MKV文件整理到以文件名为名字的文件夹中。以下是可能存在的 bug:

在 import 语句中缺少 os 模块。需要在代码开头添加 import os。

在 import 语句中缺少 shutil 模块。需要在代码开头添加 import shutil。

在 shutil.move() 函数中的文件路径需要使用正斜杠 / 而不是反斜杠 \。可以使用 os.path.join() 函数来创建正确的路径。

在 shutil.move() 函数中的目标路径应该是目标文件夹而不是文件名。需要将 name1[:-1] 替换为 os.path.join(current_path, name1[:-1])。

在 shutil.move() 函数中,需要将原始文件名添加到目标路径中,以避免文件名冲突。应该将 os.path.join(current_path, name1[:-1]) 替换为 os.path.join(current_path, name1[:-1], filename)。

在 shutil.move() 函数中,需要使用异常类 shutil.Error 来捕获移动文件时的错误。应该将 Exception 替换为 shutil.Error。

在 input() 函数中需要加入提示语,以提醒用户输入。可以将 input() 替换为 input('按任意键继续...')。

以下是修正后的代码:

[Python] 纯文本查看 复制代码
import os
import shutil

current_path = os.getcwd()
print('当前目录:'+current_path)

filename_list = os.listdir(current_path)
print('当前目录下文件:',filename_list)

print('正在分类整理进文件夹ing...')
for filename in filename_list:
    try:
        name1, name2 = filename.split('.')
        if name2 == 'mp4' or name2 == 'mkv':
            try:
                os.mkdir(name1[:-1])
                print('创建文件夹'+name1[:-1])
            except:
                pass
            try:
                shutil.move(os.path.join(current_path, filename), os.path.join(current_path, name1[:-1], filename))
                print(filename+'转移成功!')
            except shutil.Error as e:
                print('移动失败:' + str(e))
    except:
        pass

print('整理完毕!')
input('按任意键继续...')
头像被屏蔽
saszznz 发表于 2023-3-1 10:59
提示: 作者被禁止或删除 内容自动屏蔽
侃遍天下无二人 发表于 2023-3-1 13:04
首先你得明确文件名的特征,比如 {电视剧名}_{集数}.mp4,然后根据特征写代码操作
风川白日 发表于 2023-3-1 13:52
你这里因该是直接报错没执行了name1, name2 = filename.split('.') 这个拆分后返回值只有一个的,是个列表。最简单的就是找个字符串拆分后你打印出来看下,就瞬间懂了。另外一个就是你创建文件夹的时候要先判断下文件夹是否存在,不然也会导致报错,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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