问题20:如何读写文本文件
关于文件操作,参考:Python:文件操作
知识点杂集:
一、文件存储与读取的步骤:
1)思路:
- str.encode('编码格式'):对unicode字符串进行编码,编码成连续字节的格式,才能存放到文件中,即物理介质上;
- str.decode('解码格式'):对物理介质上的连续字节数据进行解码,解码常unicode格式的数据,才能在python的IDE上显示;
#编码格式:UTF-8、GBK、BIG5;
#python内部用unicode编码,来表示一个字符;显示格式也是unicode;
==>unicode编码才是真正意义上的字符串;
2)打开文件、将数据存储到文件中、关闭文件、打开并读取文件内容
A、打开文件:open()函数
完整格式:open(file, mode = 'r', buffering = -1, encoding = None, errors = None, newline = None, closefd = True, opener = None)
#file:需要打开的文件的物理地址 + 文件名;默认打开当前目录(IDE所操作的.py文件所在文件夹)下的文件,即只有文件名,不带文件物理地址;
#mode:打开的方式;
二、实例
实例1:unicode格式和str格式的转换:
s = u'你好' #encode(编码格式),指定编码格式,对unicode字符串进行编码, r = s.encode('utf-8') print(r) #输出:b'xe4xbdxa0xe5xa5xbd' #b'xe4xbdxa0xe5xa5xbd':共用了6个字节(xe4为一个字节)来编码字符串 '你好'; #得到一个string的字符串,即连续字节的字符串; #只有string的字符串,才能存到物理介质中, #decode('解码格式'),对编码的string格式的字符串进行解码; print(r.decode('utf-8')) #输出:你好 #encode选择的编码格式,要和decode选择的解码格式统一(都用utf-8),不然得不到最初的数据;
实例二:数据存放文件内、从文件内读取数据
三、其它:
1)unicode格式的数据,不能够直接存储到文本文件中,必须以一种编码格式(如UTF-8),将数据编译成连续字节的格式(如str),才能存放到文件中;
2)从文本文件中读取的也是编码后的字节,要想显示原始数据,需要对其进行解码:str.decode('解码格式')
注:解码的格式,要于文件编码时的格式统一,不然得不到最初数据;
3)从python2到python3,字符串的语义变化:
python2 ——> python3 ---------------------- str -> bytes unicode -> str
4)str,表面上表示的是字符串,实际上抽象的是一个连续的字节;
==>因为,早起美国人发明字符编码(ascii码)时,一个字节表示一个字符,只针对一个字符(不是字符串)进行编码的,若想要多个连续的字符串,则给出一个连续的字节;
==>后来,由于各国语言的字符种类较多,一个字节表示一个字符,无法满足需(表示不完),则各种编码格式被发明,其中unicode是比较通用的一种;