python如何实现批量修改文件编码为utf8

我下载了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()     

5个回答

此处用的是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()
m0_37687530
m0_37687530 回复Die_Willow: 如果想用python3的话,需要怎么修改呢
12 个月之前 回复
Die_Willow
Die_Willow yield os.path.join(dir_path, file_name) 前面需要再加四个空格的缩进,此处由于我再测试,所以忘记添加了,请见谅
一年多之前 回复

文件内容全部读出来,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()
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!