文件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:
就会出现各种编码不正确的问题