python(数据分析与可视化)一

python(数据分析与可视化)一

本地文件读写

1.读纯文本文件

重点:
(1)相对路径 : 同级./ 父级…/
(2)绝对路径

file = open('./chinase_utf8.txt',mode='r',encoding='utf-8')
content = file.read()
print(content)
file.close()

2.文本编码历史

print(‘中’.encode(encoding=‘gbk’)) -> b’\xd6\xd0’
gbk编码 :一个汉字两个字节
为了节省流量 国内有人仍坚持gbk
‘中’.encode(encoding=‘utf-8’)
对于中文,gbk比utf8节省三分之一的空间
解码: 二进制->自然信息
eg: b’\xd6\xd0’.decode(encoding=‘gbk’)

历史
我们看到的信息,例如一个文字‘中’,存储到电脑中,二进制。物理0-3v3-5v1.
编码 encoding:自然信息‘中’→二进制0101
解码 decoding:二进制→自然信息‘中’
1.上世纪电脑刚刚产生
内存、硬盘非常贵
最小信息单位1字节8bit位二进制1byte=01010101
1000byte 1kb 1000kb=1Mb 1000Mb=1Gb Tb Pb
’a‘->80000001
‘b’->0000010
‘c’->0000011
1byte8位,2的8次方,256种可能
把a-z,A-2,±()$#,把一百多种常见英文字母字符编进去,
发明了编码方式【ascii】
2.上世纪末电脑开始传入其它国家
欧洲,亚洲,中国大陆、中国台湾、日本、韩国
ascii编码无法表达中文。
用2个字节,2的16次方,65535种可能
‘一’ -> 00000000 00000001
‘中’ -> 00000010 00000101
编码常用的2w多种汉字
中国大陆发明编码方式【gbk2312】更新繁体字生僻字【gbk12302】,统称【gbk】
问题是,
中国台湾big5
'我’ -> 00000010 00000101
日本、韩国它们自己的编码方式
00001000101
日本、韩国它们自己的编码方式
每个国家自己一套编码,同样的二进制排列不同解码方式得到不同信息。
3.现代
为了改变上述问题,出现一个协会(类似IEEE、ISO、联合国),把各国代表集中开会
出现了一套大统一的编码,
【unicode】
用4个字节,2的32次方,得到一个非常大的数字,多种可能性,所有国家语言,又称万国码
0300000000000081
统一问题解决,但小代价,占用磁盘多,纯英文信息比 ascii花费4倍空间
但 unicodeascii向下兼容ascii,利用压缩算法可以省略不必要的字节,最终一个字符1-4字节
目前最流行的是【utf-8】。utf-8是 unicode编码的一种具体存储实现方式。
目前都建议使用utf-8.
4.乱码是如何产生的
编码方式和解码方式不一样

3.with语句

文件操作和其他默写操作,共性: 开始前准备,主要逻辑,收尾工作。with语句把开始前准备和收尾工作自动完成

with open('./chinase_utf8.txt',mode='r',encoding='utf8') as f:
    content = f.read()
    print(content)

4.读非纯文本文件

图片、视频、word文档是windows上有相应解码功能的软件才能预览。
我以读图片为例简单阐述一下我的个人看法:

python作为后端语言,控制台无法直接看到图片的样子,但可以看到二进制排列

#读图片二进制
with open('./cesi.jpg',mode='r+b') as f:
    print(f.read())
    
# 一长串 b'\xff\xd8\xff\xe1 ...'
#mode: rb或r+b    b表示二进制模式

5.写非纯文本文件

在这里还是以图片为例, 就是 的逆过程,所以我们首先要做的就是把一个图片的二进制代码赋予一个变量,然后执行 的逆操作,如图:

img_content_bytes = b'\xff\xd8\xff\xe1\x00\x8eExif\x00\...'
with open('./6daxuexi.jpg',mode='w+b') as f:
    f.write(img_content_bytes)

6.base64编码

场景:

  1. 字符串方式传播图片。
  2. 简单加密。
  3. 服务器兼容性。

base64编码作用的是字节
例如 ‘中’ 00000001 00000001
base64 每次取六位前面补两位0,依次类推,得到几个新的字节,比原始信息大三分之一

#整体过程:文本/图片 编码-> 二进制 -> base64 改变后的二进制 -> ascii解码成基本字符

import base64

str1 = '18536496067'
cont_b64_bytes = base64.b64encode(str1.encode(encoding='utf-8'))
print(cont_b64_bytes)
content = cont_b64_bytes.decode(encoding='ascii')
print('我的绿色软件是:',content)

#图片
with open('./6daxuexi.jpg',mode='rb') as f:
    content_bytes = f.read()
    content_b64_bytes = base64.b64encode(content_bytes)
    content_b64_str = content_b64_bytes.decode(encoding='ascii')
    print(content_b64_str)

7.base64解码

解码就是编码的逆过程,我下面举个例子:

import base64

#整体过程:文本/图片 编码-> 二进制 -> base64 改变后的二进制 -> ascii解码成基
str1 = 'MTM3MjUxMDc5NjQ='
str2 = 'T3JpZHp1cnU='

str1_bytes = str1.encode(encoding='ascii')
print(str1_bytes)
raw_bytes=base64.b64decode(str1_bytes)
print(raw_bytes)
raw_str=raw_bytes.decode(encoding='utf-8')
print(raw_str)

今天的分享就到这里,如果还想了解更多,可以看我主页!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值