zoukankan      html  css  js  c++  java
  • 适当处理文件A中字符串,split(),保存在文件B中,以及遇到UnicodeDecodeError处理方法

    文件A中每一行格式为

    [16/08/17-10:16:39 100][.audioonline_waviat00000859@gz3c7f08769174462f00.pcm][2][51320006db03][(null)][62]:一年至少不3次

    处理为文件B格式

    iat00000859@gz3c7f08769174462f00.pcm
    <s>
    一年至少不3次
    </s>
    .

    最初版,可以处理,但是会有问题

    #encoding=utf-8
    from __future__ import unicode_literals 
    import os
    import sys
    
    reload(sys)
    
    sys.setdefaultencoding('utf8')
    sys.setdefaultencoding('gb18030')
    # Python的str默认是ascii编码,和unicode编码冲突
    # 解决UnicodeDecodeError: 
    # ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128
    # UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 35: invalid
    #  start byte
    # 解决办法:
    # 在报错的页面添加代码: import sys 
    # reload(sys) 
    # sys.setdefaultencoding('gb18030')
    '''----------迭代读取文件---------------'''
    filename = raw_input('enter file name:')
    f = open(filename,'r')
    '''--------------------输出到文件-------------'''
    filename = raw_input('enter file name:')
    fobj = open(filename,'w')
    #会覆盖原文件
    for eachLine in f:
        print eachLine,
        line1 = eachLine.split('online_wav\')[1].split(']',1)[0]
        line2 = '<s>'
        line3 = eachLine.split(':',3)[3]
        line4 = '</s>'
        line5 = '.'
        print line3
        fobj.write('%s%s%s%s%s%s%s%s%s' % (line1,os.linesep,line2,os.linesep,line3,line4,os.linesep,line5,os.linesep))

    -----------------------------------------------------------------------------

    借鉴版本

    import os
    import re
    import sys

    f=open(sys.argv[1],'r')
    lines=f.readlines()
    f.close()
    temp = []
    for eachline in lines:
    pcm = eachline.strip().split('\')[-1].split(']')[0]
    result = eachline.strip().split(':')[-1]
    temp.append(pcm+' '+'<s>'+' '+result+' '+'</s>'+' '+'.'+' ')
    f=open(sys.argv[2],'w')
    f.writelines(temp)
    f.close()

    ----------------------------------------------------------

    最终版

    #encoding=utf-8
    import os
    filename = raw_input('enter file name:')
    f = open(filename,'r')
    lines = f.readlines()
    '''--------------------输出到文件-------------'''
    filename = raw_input('enter file name:')
    fobj = open(filename,'w')
    #会覆盖原文件
    for eachLine in lines:
        line1 = eachLine.split('online_wav\')[1].split(']',1)[0]
        line2 = '<s>'
        line3 = eachLine.split(':',3)[3]
        line4 = '</s>'
        line5 = '.'
        fobj.write('%s%s%s%s%s%s%s%s%s' % (line1,os.linesep,line2,os.linesep,line3,line4,os.linesep,line5,os.linesep))

    总结:lines = f.readlines()

    for eachLine in lines: 就不会出现UnicodeDecodeError: 
    # ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128这种问题

    但是利用for eachLine in f:

    就会出现各种编码不正确的问题

  • 相关阅读:
    document.ready和window.onload的区别
    js取float型小数点后x位数的方法
    深入理解CSS过渡transition
    HTTP网络协议
    记一次完整的pc前端整站开发
    理解 JavaScript 中的 Function.prototype.bind
    图片懒加载方法
    web开发中兼容性问题(IE8以上含)持续更新~~
    HTTP协议GET和POST请求的区别
    移动端适配之雪碧图(sprite)背景图片定位
  • 原文地址:https://www.cnblogs.com/lovely7/p/5779771.html
Copyright © 2011-2022 走看看