Python—编码&文件管理

本文介绍了Python中处理编码问题的方法,强调了预防乱码的关键在于存取时保持一致的编码格式。讨论了Python 2与3中字符串类型的差异,并详细讲解了文件管理,包括各种读写模式(r, w, a, t, b)及其组合,以及上下文管理、指定字符编码、文件指针操作等概念。建议在处理文本文件时使用t模式,而b模式适用于所有文件类型。" 51536417,5643505,内联函数的原理与应用,"['函数', '执行效率', '编译']
摘要由CSDN通过智能技术生成

一、编码问题

在内存中无法修改编码格式,统一为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'

  1. 打开文件
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() 
  1. 关闭文件
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') <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值