我下载了Udacity的视频,但是中文字幕是vtt格式的,于是在网上看了几个python批量转换vtt为srt的方法,因为遇到gbk和utf8神马的问题,自己修改了下,终于能运行了,但是转换后的srt字幕是乱码。后来发现只要把srt的文件另存为时改编码为utf8就可以看了,请问怎么把srt批量修改成编码utf8??或者在转换的过程中就保存为utf8,转换的代码如下:
#coding = utf-8
import os
import re
path = r"D:\课件临时\2"
vttName = []
for i in os.listdir(path):
name = i.split('.')
if name[-1] == 'vtt':
vttName.append(i)
for vttname in vttName:
vtt = open(path + "\\" + vttname,'rb')
filevtt = vtt.read().decode('utf-8')
vtt.close()
#print filevtt
listvtt = filevtt.split('.')
#print listvtt
#print listvtt[0][8:]
strvtt = listvtt[0][8:]
for i in range(1 , len(listvtt) ):
strvtt = strvtt + "," + listvtt[i]
#print strvtt
srtName = vttname.split('.')
srtt = open(path + '\\' + srtName[0] + '.srt','bw')
for r in strvtt:
r=r.encode('utf-8')
srtt.write(r)
srtt.close()
此处用的是python2,main函数为主函数,请采纳,如有疑问,请回复。
# coding = utf-8
import os
path = r"D:\课件临时\2"
def conversion_coding(file_name, before='gbk', after='utf8'):
# 此处转化文件编码,默认源文件编码为gbk,转换为utf8。
# 原理: 读取文件中所有的内容(缓存到内存中),然后覆盖原文件(将缓存中的内容重新存入新文件)
try:
with open(file_name,'r',encoding = before ) as f:
file_data = f.readlines()
with open(file_name,'w',encoding = after) as f:
f.writelines(file_data)
except Exception as e:
print '转换文件“{0}”失败!:{1}'.format(file_name, e)
def get_file_name(dir_path):
if os.path.isdir(dir_path):
# 获取目录下所有的文件,此处可添加文件筛选规则,如后缀为txt的文件将被返回
for file_name in os.listdir(dir_path):
# 此处对文件进行筛选
if file_name.split('.')[-1] == 'vtt':
yield os.path.join(dir_path, file_name)
else:
print('"{0}" 这不是一个目录'.format(dir_path))
def main():
# path = raw_input("请输入转换目录:") # 取消注释可修改为根据输入的目录进行转换
for file_name in get_file_name(path):
conversion_coding(file_name)
main()
文件内容全部读出来,coding改成utf8再写进去
open的时候设置utf8。然后write写文件
读取全部文件内容,把coding改成UTF-8再写进去
望采纳
def gbkToUtf8(infile,outfile):
fin = open(infile,'r',encoding='gbk')
fout = open(outfile,'w',encoding='utf-8')
for line in fin.readlines():
fout.write(line)
fin.close()
fout.close()