python 文件操作 中文编码

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'汉'   #unicode
print repr(u) # u'\u6c49'
s = u.encode('UTF-8') #unicode编码成utf-8
print repr(s) # '\xe6\xb1\x89'
u2 = s.decode('UTF-8') #从utf-8解码成unicode
print 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-8
a='汉字'
import codecs
fr=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 sys
reload(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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值