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: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() 因为name1依次是:大考第1集、大考第2集、大考第3集、、、,切片name1[:-1]得到的依次是:大考第1、大考第2、大考第3、、、,并没有提取出电视剧名字,所以每次都会创建一个新的文件夹。 正在学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('第')
# 创建文件夹
name.mkdir(exist_ok=True)
# 移动
shutil.move(f, name)
帮你问了下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('按任意键继续...')
首先你得明确文件名的特征,比如 {电视剧名}_{集数}.mp4,然后根据特征写代码操作 你这里因该是直接报错没执行了name1, name2 = filename.split('.') 这个拆分后返回值只有一个的,是个列表。最简单的就是找个字符串拆分后你打印出来看下,就瞬间懂了。另外一个就是你创建文件夹的时候要先判断下文件夹是否存在,不然也会导致报错,
页:
[1]
2