m0_37687530 2018-03-18 11:09 采纳率: 100%
浏览 4694
已采纳

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条回答 默认 最新

  • Die_Willow 2018-03-21 17:13
    关注

    此处用的是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()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!