m0_37687530
m0_37687530
采纳率100%
2018-03-18 11:09 阅读 4.5k

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

5

我下载了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 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()
    
    点赞 1 评论 复制链接分享
  • keerhe106 keerhe106 2018-03-18 11:43

    文件内容全部读出来,coding改成utf8再写进去

    点赞 评论 复制链接分享
  • oyljerry oyljerry 2018-03-18 11:58

    open的时候设置utf8。然后write写文件

    点赞 评论 复制链接分享
  • qq_33125611 qq_33125611 2018-03-18 11:59

    读取全部文件内容,把coding改成UTF-8再写进去

    点赞 评论 复制链接分享
  • u011514451 hpu刘 2018-03-19 03:39

    望采纳

     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()
    
    点赞 评论 复制链接分享

相关推荐