python 文件操作 中文编码

来源:互联网 发布:PHP api创建窗口 编辑:程序博客网 时间:2024/04/29 02:47

1.文件操作

os.mknod("test.txt")  #创建空文件fp = open("test.txt",'w') #直接打开一个文件,如果文件不存在则创建文件

open模式:
r:以读方式打开,可读取文件信息。所有读操作完毕,都会把文件指针移到读之后的位置。
w:以写方式打开,如文件存在,则清空文件,再写入新内容
a:以追加模式打开(从EOF开始,必要时创建新文件)
r+:以读写模式打开
w+:消除文件内容,然后以读写模式打开
a+:以读写模式打开,并把文件指针移到文件尾
b:以二进制模式打开文件

fileName='D:/Python7/ab.txt'fr=open(fileName,'r')#fr.read([count])  #读取文件,如果有count,则读出count个字节#print fr.read()   #读取全文,返回的类型是str,读完后,文件指针移到文件末尾#print fr.read(20)    #读取20个字符(还是字节?)#fr.readline()  #读出一行信息,读完一行后,指针后移,下次再读就是读第2行#循环输出文件#for l in fr.readlines():#    print l#fr.close()

2. 中文编码

2.1 编码种类

  • ASCII:单字节编码(0-127),只能表示英文和许多控制符号
  • MBCS(Multi-Byte Character Set),多字节编码,如GBxxx,BIGxxx等,GBK是ANSI的一种,属于ANSI
  • Unicode 所有语言的字符都用同一种字符集来表示,这就是Unicode
  • UTF-8 :是变长的,并且兼容ASCII,ASCII字符使用1字节表示。

2.2 python中的str和unicode

str和unicode都是basestring的子类。严格意义上说,str其实是字节串,它是unicode经过编码后的字节组成的序列。对utf-8编码的str’汉’使用len()函数时,结果是3,因为实际上,utf-8编码的’汉’==’\xE6\xB1\x89’。
unicode才是真正意义上的字符串,对字节串str使用正确的字符编码进行解码后获得,并且len(u’汉’)==1
不能对unicode进行解码

u = u'汉'   #unicodeprint repr(u) # u'\u6c49's = u.encode('UTF-8') #unicode编码成utf-8print repr(s) # '\xe6\xb1\x89'u2 = s.decode('UTF-8') #从utf-8解码成unicodeprint repr(u2) # u'\u6c49'# 对unicode进行解码是错误的# s2 = u.decode('UTF-8')# 同样,对str进行编码也是错误的# u2 = s.encode('UTF-8')

2.3 读写文件

内置的open方法打开文件时:

  • read()读取的是str,读取后需要使用正确的编码格式进行decode()。
  • write()写入时,如果参数是unicode,则需要使用你希望写入的编码进行encode(),如果是其他格式的str,则需要先用str的编码进行decode(),转成unicode后再使用写入的编码进行encode()。如果直接将unicode作为参数传入write()方法,python将先使用源代码文件声明的字符编码进行编码然后写入。
# coding:UTF-8a='汉字'import codecsfr=codecs.open("1.txt",'w',encoding='utf-8')fr.write(a)//报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)#要这样写:fr.write(a.decode('utf-8'[,'ignore'])#这里a的类型是str,字符串,怎么知道是utf-8编码的字符串呢?因为在第一行写了#coding:utf-8#如果首行是#coding:gbk,那么字符串就会用gbk编码,写入文件的时候就要decode('gbk')fr.close()

2.4 python默认编码

import sysreload(sys)sys.setdefaultencoding('utf-8')

2.5 unicode-escape

在Python里面使用unicode型的字符是这样:

>>> a = u'你好'>>> a>>> u'\u4f60\u597d'>>> print a>>> 你好#那我现在有个字符串是str型的,而且内容已经是unicode编码,比如:>>> b = '\u4f60\u597d'>>> b>>> '\\u4f60\\u597d'>>> print b>>> \u4f60\u597d>print b.decode('unicode_escape')

现在要将b转换成unicode的“你好”,也就是a那样,该怎么做?
How do I treat an ASCII string as unicode and unescape the escaped characters in it in python?

3.python写入中文到数据库

第一步:数据库那边总得把字段类型设置为utf8之类类的吧。
第二步:在连接数据库的时候,加个参数,说明数据库那边的字段类型一致,charset=’utf8’。
大概就是这样:

conn =MySQLdb.connect(host="127.0.0.1",user="nimei",passwd="nimei",db="nimei",charset="utf8")
0 0