基于python对B站缓存视频的批量复制,重命名

问题实例:
B站视频:《李子璇豆子舞蹈合集(持更)》
链接:https://www.bilibili.com/video/av27235826/?p=1
在这里插入图片描述
该视频截至2018.11.30有195个分P,通过缓存到手机上并把缓存目录所在的文件夹上传至PC端。利用格式工厂查找.blv格式的所以文件并转化为.MP4格式。保存于源文件。
但是B站所缓存的视频并不是集中存放于一个文件而是被分散许多小文件夹当中存放。并且所有视频的名称都是0。如以下几图所示,P1视频被存放于.\1\lua.flv720.bili2api.64\0.MP4 目录下。对于大批量的文件来说,手动给每个MP4文件更改文件名,是不现实的。因此决定用Python编写简单脚本完成对大量0.MP4文件的集中存储与重命名。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析:
重命名:
从B站爬取该视频下每个分P的标题,并存储为txt文档。如下图:txt中每一行对应于一个P的标题。txt存放位置:C:\Users\DELL\Desktop\title.txt

在这里插入图片描述
视频源文件位置:G:\download\27235826\n\lua.flv720.bili2api.64\0.mp4
其中n=1 to 195 的整数
视频目的地址:G:\1\27235826
伪代码:
读取txt文件的每行,存放在列表list
for 遍历源文件找到视频文件 i:
将 i 复制到目的地址下
从list中找出相应的标题title
重命名 i–>title

代码如下:

import os             #载入os库               
import shutil         #载入shutil库


#获取分p标题列表
def getNewName():
    name=[]
    path='C:\\Users\\DELL\\Desktop\\title.txt'     #titile.txt地址
    for line in open(path):                        #读取txt文件的每一行
        line=line.replace("/"," ")			#去掉line中的斜杠
        name.append(line.strip())                   #记录于标题列表
    return name


#获取源视频路径列表
def getOldVideoPath():
    oldpath=[]            
    for i in range(1,196):
        path='G:\\download\\27235826\\'+str(i)   #视频地址
        for dirpath, dirnames, filenames in os.walk(path):  #遍历视频地址下所有文件
            if "0.mp4" in filenames:       #若该文件下有0.MP4文件存在,则记录下来
                videopath=dirpath+"\\0.mp4"
                oldpath.append(videopath)
    return oldpath              #返回源视频路径列表


#主函数    
def main():
    name=getNewName()
    oldpath=getOldVideoPath()
    for i in range(1,196):
        try: 
            shutil.copy(oldpath[i-1],'G:\\1\\27235826')  #复制文件到G:\1\27235826
            print i,'copy ok'
            newname='G:\\1\\27235826\\'+name[i-1]+'.mp4' #构建新文件名
            os.rename('G:\\1\\27235826\\0.mp4',newname)  #重命名
            print i,'rename ok'
        except:
            print 'error',i


#主函数自动运行        
if '__name__'!='__main()__':
    main()

总结:
1.要对从TXT文档读取到的数据进行整理,去掉不符合规范的字符,比如‘/’,换行符 line.replace("/"," ") line.strip()
2.os.walk()没有返回值,用for来 获取值

for dirpath, dirnames, filenames in os.walk(path)

如果目录层级多的话可能遍历不止一次,可能会有0结果,很坑
3.shutil.copy() shutil.copyfile() shutil.move() 不一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值