一、编码问题
在内存中无法修改编码格式,统一为Unicode。
如何预防乱码?
- 存乱了:硬盘编码格式应该设置成支持文件内字符串的格式。但现在都应该存成utf-8!
- 取乱了:以什么编码格式存入硬盘,就以什么格式读取。
编辑器 指定文件头,加 # coding:xxx
,xxx为文件当初存入硬盘所采用的格式。
python2.7默认ASCII码,3.X默认utf-8。
对于字符,
python3的str类型默认直接存成unicode格式,无论如何都不会乱码;
python2则会,所以需要如右声明 x = u'字符'
*了解内容
(1)对于python2,解释器有2种字符串类型:str、unicode。
str类型:x = '字符'
#字符串值会按照文件头指定的编码格式存入变量值的内存空间。
unicode类型:x = u'字符'
#强制存成unicode
(2)对于如 ‘a字b’的字符,gbk格式下占位为“1Byte 2Bytes 1Byte”(英文1Byte,汉字2Bytes),存没毛病,但取的时候如何识别和分割?
——如’a字b’,假设其对应二进制为
a 字 b
0001100 1001100 1001100 0001100
8个bit位,首位仅仅用来标识:0为英文字符,1为中文字符。
(3)
编码:
x = '字'
res = x.encode('gbk') #unicode——>gbk
print(res,type(res))
>>> b'\xc9\xcf' <class 'bytes'>
encode:把python的unicode转成其他编码,往其他平台传输(需要与老平台对接时)或存至本地硬盘。
解码:
print(res.decode('gbk'))
>>> 字
二、文件管理
(一)如何用文件
open()
控制文件读写内容的模式:t 文本模式和b 二进制模式。
【t和b不能单独使用,必须与r/w/a连用】
t 文本模式(默认模式)
i) 读写都以str(unicode)为单位
ii) 只针对文本文件
iii) 必须指定encoding = 'utf-8'
- 打开文件
open(r'C:\user\nb\test.txt') #加r
open('C:/user/nb/test.txt') #左斜杠
f = (r'C:\user\nb\1.txt', mode = 'rt') #涉及 1变量定义,占用内存资源;2告诉操作系统打开一个文件
当出现如\n
等转义字符,需要在整个字符串前加 r ,或都写为/ 。
2. 操作文件(读写)
f.read()
- 关闭文件
f.close() #回收操作系统资源
# del f #回收应用程序资源,通常不需要做,python会帮你做
(二)with上下文管理
with open('a.txt, mode = 'rt') as f1,\
open('b.txt, mode = 'rt') as f2:
res1 = f1.read()
res2 = f2.read()
print(res1)
print(res2)
python帮你做了f1/f2.close()
(三)指定字符编码
with open('c.txt', mode = 'rt', encoding = 'utf-8') <