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:

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

  • 相关阅读:
    【tensorflow】神经网络的一些基本概念(前向传播、反向传播、损失函数、梯度下降法、学习率)和设计过程
    【opencv+python】图像的基本操作:缩放、剪切、位移、旋转、仿射变换
    【tensorflow】利用神经网络绘制股票价格拟合曲线
    Tuple
    2020-08-17T15:35:54.525+08:00
    FTP协议协议
    centos7常规系统指标监控shell脚本
    AWK传入shell变量举例
    洛谷-P5143 攀爬者
    洛谷-P1104 生日
  • 原文地址:https://www.cnblogs.com/lovely7/p/5779771.html
Copyright © 2011-2022 走看看