python:打开⽂件open和codecs区别
当我⾯有数据需要保存时,第⼀时间⼀般会想到写到⼀个txt⽂件中,当然,数据量⽐较⼤的时候还是写到数据库⽐较⽅便管理,需要进⾏⽹络传输时要序列化,json化。下⾯主要整理⼀下平时⽤的最多的写⼊到⽂件中,⼀般以txt结尾,linux⾥不会以后缀来区分⽂件类型,后缀可以随便,也可以没有。
python读写⽂件估计⼤家都⽤open内置函数,或者file这个⼯⼚函数,这两个的效果基本⼀样。
打开⽂件的⽅式⼀般为:f=open(file_name,access_mode = 'r',buffering = -1)。file_name就是⽂件的路径加⽂件名字,不加路径则⽂件会存放在python程序的路径下,
access_mode就是操作⽂件的模式,主要有r,w,rb,wb等,细节⽹上⼀⼤堆,buffering = -1是⽤于指⽰访问⽂件所采⽤的缓存⽅式。0表⽰不缓存;1表⽰只缓存⼀⾏,n代表缓存n⾏。如果不提供或为负数,则代表使⽤系统默认的缓存机制。
打开以后就是写和读的操作。但是⽤open⽅法打开会有⼀些问题。open打开⽂件只能写⼊str类型,不管字符串是什么编码⽅式。例如:
python怎么读文件夹下的文件夹>>> fr = open('','a')
>>> line1 = "我爱祖国"
>>> fr.write(line1)
这样是完全可以的。但是有时候我们爬⾍或者其他⽅式得到⼀些数据写⼊⽂件时会有编码不统⼀的问题,所以就⼀般都统⼀转换为unicode。此时写⼊open⽅式打开的⽂件就有问题了。例如
>>> line2 = u'我爱祖国'
>>> fr.write(line2)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
fr.write(line2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)
>>>
怎么办,我们可以将上⾯的line2编码成str类型,但是太⿇烦。我们要把得到的东西先decode为unicode再encode为str。。。
input⽂件(gbk, )  ----decode----->  unicode  -------encode------> output⽂件(gbk, )
代替这繁琐的操作就是codecs.open,例如
>>> import codecs
>>> fw = codecs.open('','a','utf-8')
>>> fw.write(line2)
>>>
不会报错,说明写⼊成功。这种⽅法可以指定⼀个编码打开⽂件,使⽤这个⽅法打开的⽂件读取返回的将是unicode。写⼊时,如果参数 是unicode,则使⽤open()时指定的编码进⾏编码后写⼊;如果是str,则先根据源代码⽂件声明的字符编码,解码成unicode后再进⾏前述操作。相对内置的open()来说,这个⽅法⽐较不容易在编码上出现问题。
总结⼀下:⽂件读尽量⽤第⼆种⽅法,⼀般不会出现编码的问题。⾄于⽤第⼆种⽅法有什么缺点,我没有研究过。。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。