Python读取文件

今天学习python,学到读取文件那章,书上是这么写的:

file = open("E:\test.txt",'r')
但是老是提示错误..后来在网上找到了正确的写法:

open(r"E:\test.txt",'r+')
或者open(r"E:\test.txt",'r')

 

后来发现读取中文名字的文件名仍然有问题,去网上查了下,是编码的问题,下面这一写就可以了,但是还是不方便,把python编码搞清楚了再来研究

filename = u"E:/各网站账号密码.txt"
myFile = open(filename)
for value in myFile:
    print  value
另:decode函数与encode函数

string = '工作经验'
s = string.decode("UTF-8")
string2 =u'没有'
s2 = string2.encode("gbk")
print str(string)
print s
print  s2.decode('gbk')
 

为了防止编码错误,可以这样写

<span style="font-size:10px;font-weight: normal;">s="中文" 

if isinstance(s, unicode): 
#s=u"中文" 
print s.encode('gb2312') 
else: 
#s="中文" 
print s.decode('utf-8').encode('gb2312')</span>

文件头行用:

# -*- coding: utf-8 -*-
是用来指定文件编码为utf-8的
详情可以参考:
PEP 0263 — Defining Python Source Code Encodings




在此,详细的(主要是翻译)解释一下,为何要加这个编码声明,以及如何添加编码声明:




使用文件编码声明以前所遇到的问题
Python 2.1中,想要输入Unicode字符,只能用基于Latin-1的"unicode-escape"的方式输入 -> 对于其他非Latin-1的国家和用户,想要输入Unicode字符,就显得很繁琐,不方便。
希望是:
编程人员,根据自己的喜好和需要,以任意编码方式输入字符串,都可以,这样才正常。





建议选用的方案
所以,才有人给Python官方建议,所以才有此PEP 0263。
此建议就是:
允许在Python文件中,通过文件开始处的,放在注释中的,字符串形式的,声明,声明自己的python文件,用何种编码。
由此,需要很多地方做相应的改动,尤其是Python文件的解析器,可以识别此种文件编码声明。




具体如何声明python文件编码?
上面已经说了,是,文件开始处的,放在注释中的,字符串形式的,声明。
那具体如何声明,以什么样的格式去声明呢?
其实就是,你之前就见过的,这种:
# -*- coding: utf-8 -*-
对此格式的详细解释是:
如果没有此文件编码类型的声明,则python默认以ASCII编码去处理
如果你没声明编码,但是文件中又包含非ASCII编码的字符的话,python解析器去解析的python文件,自然就会报错了。
必须放在python文件的第一行或第二行
支持的格式,可以有三种:
带等于号的:
# coding=<encoding name>
最常见的,带冒号的(大多数编辑器都可以正确识别的):
#!/usr/bin/python
# -*- coding: <encoding name> -*-
vim的:
#!/usr/bin/python
# vim: set fileencoding=<encoding name> :
更加精确的解释是:
符合正则表达式:
"coding[:=]\s*([-\w.]+)"
的都可以,很明显,如果你熟悉正则表达式,也就可以写出来,其他一些合法的编码声明,以utf-8为例,比如:
coding: utf-8
coding=utf-8
coding= utf-8
encoding:utf-8
crifanEncoding=utf-8
为了照顾特殊的Windows中的带BOM(’\xef\xbb\xbf’)的UTF-8:
如果你的python文件本身编码是带BOM的UTF-8,即文件前三个字节是:’\xef\xbb\xbf’,那么:
即使你没有声明文件编码,也自动当做是UTF-8的编码
如果你声明了文件编码,则必须是声明了(和你文件编码本身相一致的)UTF-8
否则(由于声明的编码和实际编码不一致,自然)会报错


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值