python的字符编码系统和文件操作
项目改进
''' l = [11,22,33,22,11,22,66,55,77,99] 对列表元素进行去重 拔高:去重之后保持原来的顺序(不要惯性思维) ''' l = [11,22,33,22,11,22,66,55,77,99] list1=[] for num in l: # 如果元素在llist1列表中不存在 if num not in list1: # 将元素插入列表 list1.append(num) print(list1) # 输出为[11, 22, 33, 66, 55, 77, 99]
字符编码
电脑只识别低电平和高电平状态,人为的把低电平定义为0、高电平为1这也是二进制
现今人类的数字和字符之间存在对应关系
字符编码发展史
1.一家独大
美国最先发明了电脑,为了计算机能识别英语发明了:
ASCII码
内部记录了英文与数字的对应关系
2.群雄逐鹿
中国:GBK码
内部记录英文、中文与数字的对应关系
韩国:Euc_kr码
内部记录英文、韩文与数字的对应关系
日本:shift_JIS码
内部记录英文、日文与数字的对应关系
3.统一
unicode码(万国码)
内部记录各个国家与数字的对应关系
utf8(万国码优化版)
目前默认使用的编码
''' 所以当数据接收为乱码时,可以选这更改文本的字符编码即可 '''
编码与解码
- 编码
通过编码本把字符编程为计算机可识别的二进制数据
''' encode() 将字符转化为二进制 语法: 变量名.encode('字符编码') ''' num ='你好' # 输出为b'\xe4\xbd\xa0\xe5\xa5\xbd',这位utf8编码 print(num.encode('utf8'))
- 解码
通过解码本把计算机可识别的二进制数据
''' decode() 将二进制转化为编码 语法: 变量名.decode('字符编码') ''' num =b'\xe4\xbd\xa0\xe5\xa5\xbd' # 输出为'你好' print(num.decode('utf8'))
- 补充
用什么字符编码进行编码的结果,只能用该字符编码解码
文件操作
- 文件路径
相对路径:需要一个参考物才可以,例如:隔壁,在前面......
绝对路径:不需要有参考物,例如:GPS
- 转义字符
\n:换行符,功能为空行
\t:制表符,功能为空格
源字符r可以取消转义
- 推荐用法
with open(文件路劲,读写模式,字符编码) as 变量名
- 不推荐用法
变量名= open(文件路径,读写模式,字符编码)
命令
变量名.close
- 补充
占位符pass with open(...,...,...)as f: # 无实际操作,用于完整代码 pass
读写模式
''' r 只读模式 文件路径不存在无法读取文件,会报错 文件路径存在,可以打开文件开始读 开始读文件时,光标在开头,读完时光标在结尾 ''' with open(r'aaa.txt','r',encoding='utf8') as f: print(f.read()) # 一次性读取文件内容 ''' w 只写模式 文件路径不存在会自动创建 文件路径存在,会清空文件再开始写 ''' with open(r'aaa.txt','w',encoding='utf8') as f: f.write('文件内容') ''' a 只追加模式 文件路径不存在会自动创建 文件路径存在,光标会移动到末尾再开始写 ''' with open(r'aaa.txt','a',encoding='utf8') as f: f.write('文件内容') 补充:读取优化 with open(r'aaa.txt','r',encoding='utf8') as f: # 逐行输出文件内容,避免内存空间不够使用 for num in f: print(num)
操作模式
- t模式
文本模式(为上述三种模式的默认模式)
rt,wt,at
1.该模式只能操作文本文件
2.该模式下需要有encoding字符编码
3.读写都以字符串为单位
语法和书写格式与上述相同
- b模式
二进制模式,没有字符编码
rb,wb,ab
1.该模式可以操作任意类型文件
2.该模式下不需要指定encoding参数
3.读写都是以bytes(二进制)为单位
# 写文件 with open(r'文件名.txt','wb') as f: f.write() #图片拷贝 #将图片的二进制码存入变量 with open(r'图片名.jpg','rb') as f: data = f.read() #将图片拷贝为新建图片中 with open(r'新图片名.jpg','wb') as f: f.write(data) #拼接 with open(r'文件名.txt','ab') as f: f.write() ''' 如果在文件中插入代码,图片形式无法输出,但图片内存会增加 '''