dft2010 发表于 2023-3-1 00:14

python文件分类无效

本帖最后由 dft2010 于 2023-3-1 21:58 编辑

经常下电视剧,但下载软件不能自动根据剧集分类,所以会有很多剧集混搭在一起,需要根据剧集名,把同一个电视剧分类建文件夹归档,不知道下面的代码为什么不行,请大佬帮忙看一下,谢谢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()

youth96 发表于 2023-3-1 00:18

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

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

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


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


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


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)
      name2 = filename.rsplit('.',1)
      if name2 == 'mp4' or name2 == 'mkv':
            file_path = name1.split('第')
            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

正在学python, 看大佬们回复很得帮助

lypxynok 发表于 2023-3-1 08:33

学习了,谢谢分享

archer0258 发表于 2023-3-1 09:11

from pathlib import Path
import shutil

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

# 遍历文件夹
for f in p.glob('*.*'):
    # 排除自身
    if f.suffix != ".py":
      # 如果所有文件都是以第分割的
      name = p / f.stem.split('第')
      # 创建文件夹
      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('按任意键继续...')。

以下是修正后的代码:

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('.') 这个拆分后返回值只有一个的,是个列表。最简单的就是找个字符串拆分后你打印出来看下,就瞬间懂了。另外一个就是你创建文件夹的时候要先判断下文件夹是否存在,不然也会导致报错,
页: [1] 2
查看完整版本: python文件分类无效