python open file

lin422 2012-03-26 01:46:08
# -*- coding: utf-8 -*-
默认是Utf8

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

怎么可以实现都能读 呢
...全文
314 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
killbug2004 2012-04-05
  • 打赏
  • 举报
回复
我上面的方法用于处理字符串 文件建议用7楼的方法
killbug2004 2012-04-05
  • 打赏
  • 举报
回复
可以尝试使用chardet模块chardet.detect查询编码,再配合异常处理
huangandfly 2012-03-29
  • 打赏
  • 举报
回复
个人感觉读出来的都是一些字节流吧,然后再根据相应的编码方式还原不就行了
WaistCoat05 2012-03-27
  • 打赏
  • 举报
回复
直接二进制读,然后decode解码
RabbitLBJ 2012-03-27
  • 打赏
  • 举报
回复
个人感觉读出来的都是一些字节流吧,然后再根据相应的编码方式还原不就行了
livesguan 2012-03-27
  • 打赏
  • 举报
回复
你是可以拿到文件编码类型的,根据文件编码类型,可以指定读写文件的编码方式。
bijie521yl 2012-03-27
  • 打赏
  • 举报
回复
赞同7楼的做法,先读出来,判断抛异常,如果编码方式大于3中,可以在异常中在抛异常
angel_su 2012-03-27
  • 打赏
  • 举报
回复
utf8 with bom开始三字节是EF BB BF,utf16-le的bom是FF FE,utf16-be是FE FF。懒得自己解析转换可以试试codecs模块,读写自动转换,下面代码把文件的英文字母转大写,新文件编码照原来:
import codecs

try:
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())


lin422 2012-03-26
  • 打赏
  • 举报
回复
2.x
WaistCoat05 2012-03-26
  • 打赏
  • 举报
回复
首先得明确你用的是python2.x还是3.x版本?
Rlay_2 2012-03-26
  • 打赏
  • 举报
回复
感觉楼主说的问题好厉害的样子,有点不懂,我猜,也许可以全部用默认的Unicode进行读取,需要对读取内容处理的时候再解码

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧