读书人

python open file,该如何解决

发布时间: 2012-04-09 13:41:25 作者: rapoo

python open file
# -*- coding: utf-8 -*-
默认是Utf8

python 读文件 , 文件有些是utf8 without bom, 有的是utf16-le. 有的是 utf8 with bom

怎么可以实现都能读 呢

[解决办法]
感觉楼主说的问题好厉害的样子,有点不懂,我猜,也许可以全部用默认的Unicode进行读取,需要对读取内容处理的时候再解码
[解决办法]
首先得明确你用的是python2.x还是3.x版本?
[解决办法]
你是可以拿到文件编码类型的,根据文件编码类型,可以指定读写文件的编码方式。
[解决办法]
个人感觉读出来的都是一些字节流吧,然后再根据相应的编码方式还原不就行了
[解决办法]
直接二进制读,然后decode解码
[解决办法]
utf8 with bom开始三字节是EF BB BF,utf16-le的bom是FF FE,utf16-be是FE FF。懒得自己解析转换可以试试codecs模块,读写自动转换,下面代码把文件的英文字母转大写,新文件编码照原来:

Python code
import codecstry:    with codecs.open('1.txt', encoding='utf-16') as f:        s = f.read() #unicode string        encoding='utf-16'except:    with codecs.open('1.txt', encoding='utf-8') as f:        s = f.read()#.lstrip(u'\ufeff') #unicode string        encoding='utf-8'        with codecs.open('new.txt', 'w', encoding=encoding) as f:        f.write(s.upper())
[解决办法]
赞同7楼的做法,先读出来,判断抛异常,如果编码方式大于3中,可以在异常中在抛异常
[解决办法]
个人感觉读出来的都是一些字节流吧,然后再根据相应的编码方式还原不就行了
[解决办法]
可以尝试使用chardet模块chardet.detect查询编码,再配合异常处理
[解决办法]
我上面的方法用于处理字符串 文件建议用7楼的方法

读书人网 >perl python

热点推荐