python格式转换的记录
Python的格式转换太难了。
与其说是难,具体来说应该是“每次都会忘记该怎么处理”。所以于此记录,总的来说是编码+格式转换的记录。
本文记录环境:python3.6
经常见到的格式转换:
bytes-str
socket、网络通信和网站的很多数据传输,都是使用bytes格式在传送消息,而同时很多时候我们也需要把这些信息编程str来试着人工读信息。
此时使用方法:decode([编码格式])来完成bytes到str的转换,而str的货真价实的编码就是utf-8、gbk等等。
str-bytes
反过来,要把对人友好的字符串等转化到对机器友好的字节流,用encode()方法来完成。
bytes-十六进制数
我们通常更常用的其实是字符串转十六进制,但bytes作为桥梁更简单,只要组合一下就行了。
python3需要使用库binascii来完成很多这类在python2中可直接进行的转换,bytes转为十六进制数字文本,只需要使用binascii.b2a_hex()即可,具体更多用法可以在python的cmd模式下使用help(binascii)查看。

然后就可以拿这个十六进制数文本去加密或者其它处理。
十六进制数-bytes
反过来使用binascii.a2b_hex()即可。
bytes的base64编码/解码
很多网站会进一步把一些信息用base64的方式传输,有的为了节约资源,有的为了让ascii无法显示的乱码不至于被错误处理而产生误差,总之base64是好东西。
python3自带base64库,import base64后,使用base64.b64encode()或base64.b64decode()来对bytes型量进行base64编码或解码。

一些天坑的东西
1. python打开文件的编码格式
python打开文件很简单,常用的比如open(),with open as之类,然而有时候会出些小问题,比如txt文件,windows写入和读取txt默认都是unicode的方式(毕竟,没记错的话open这类函数是靠操作系统提供的中断函数完成的),这时候,如果要写入的文本是utf-8编码的,就有可能报错,有时候不报错,但是会产生乱码。(特别是用爬虫爬些稀奇古怪的网站的源代码时候,写入文件很容易变成乱码。)

所以要设置open()的编码,在最后加上,encoding="utf-8"。可以看到成功写入10个字符。


2.request.get时候的编码
写爬虫的时候,有时候需要获取当前网页的源代码然后进行一些其他操作,比如找其它页面,对于一些能用偏静态手段处理的网页,request库仍然是最合适的选择,使用result=request.get(html)得到目标网页的应答信息,要查看源代码时,有两种方式:一是result.text,一种是result.content。这两种的区别在于,result.text会自动对网页应答进行unicode编码,这极有可能导致信息错误或乱码,而result.content则直接返回网页应答的bytes类型信息。在必要情况下,就算是要得到网页某部分的文本,也应该用content获取原始bytes信息再自行转为utf-8等编码文本来使用。
python格式转换的记录的更多相关文章
- Qt 格式转换问题 记录(好多方法)
用Qt经常头痛于一些格式不能通用的问题 在此记录备用 1 (20120112)QString转为Char * QString *str; char *a; str="hello word ! ...
- Python datatime 格式转换,插入MySQL数据库
Python datatime 格式转换,插入MySQL数据库 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-11-2 ...
- Python 日期格式转换
经常需要爬取网站上的时间信息,不同的网站又有不同的日期显示方式.而我需要将日期格式转化为一种特定的格式,所以为了简便和学习,记录下各种不同的日期格式转换. 日期格式化符号: %y :两位数的年份表示( ...
- python如何转换word格式、读取word内容、转成html
# python如何转换word格式.读取word内容.转成html? import docx from win32com import client as wc # 首先将doc转换成docx wo ...
- python 将png图片格式转换生成gif动画
先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...
- python中的时间和时间格式转换
1.python中的时间:要得到年月日时分秒的时间: import time #time.struct_time(tm_year=2012, tm_mon=9, tm_mday=15, tm_hour ...
- python 字符串str和json格式转换
最近在写一个脚本,需要处理从excel中读取的数据,发现读取的json格式数据进行转换时报错 ValueError: Expecting property name enclosed in doubl ...
- python 数组格式转换
格式转换 arr1 = [ {'name': 'jack', 'hobby': '西瓜'}, {'name': 'jack', 'hobby': '冬瓜'}, {'name': 'rose', 'ho ...
- Python 数字格式转换
# 数字格式转换v1 '''a = input() a1 = list(a) b = ["零", "一", "二", "三&quo ...
随机推荐
- ES6 class类 静态方法及类的继承
一.class类 ES6之前都是定义函数以及函数的原型对象实现类型, 如果想要实现共享构造函数成员,可以用prototype来共享实现 ES6出现之后,使用class类的概念来实现原型的继承 二,静态 ...
- 手把手教你用C语言编写一个哈希表
原文链接:https://www.swack.cn/wiki/001558681974020669b912b0c994e7090649ac4846e80b2000/001572849111298ae3 ...
- 解决surfacebook无法运行64位虚拟机的问题
如果您嫌烦请直接看英文部分解决方案,另外windows专业版内置的hyper-v也是一款及其好用的虚拟机. 网上各种方案都尝试过,但是每次使用VMware创建64为虚拟机的时候总会显示不支持64位虚拟 ...
- jxl解析多个excel工作表-java代码
@Override public ResultBean txImportDqKpi(String filePath) { ResultBean rb = new ResultBean(); int s ...
- vue 深度作用选择器
使用 scoped 后,父组件的样式将不会渗透到子组件中 如果想在使用scoped,不污染全局的情况下,依然可以修改子组件样式,可以使用深度作用选择器 .tree{ width: 100%; floa ...
- [工作札记]02: .Net Winform控件TreeView最简递归绑定方法
前言:Treeview控件是我们在WinForm.WebForm开发中经常使用的控件,需要从数据库动态加载数据,然后递归绑定每一个节点:同样,递归的思路在其他程序中也经常运用,包括.Net MVC等. ...
- Java JDBC的 url 配置信息和Mybatis核心配置文件(MySQL 的配置信息)
JDBC 连接数据库的 url driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/smbms?uesSSL=true&u ...
- Pulsar vs Kafka,CTO 如何抉择?
本文作者为 jesse-anderson.内容由 StreamNative 翻译并整理. 以三个实际使用场景为例,从 CTO 的视角出发,在技术等方面对比 Kafka 和 Pulsar. 阅读本文需要 ...
- 简单的DbContext工厂类(EFCore)
前言 根据appsettings.json的中配置的数据库类型,使用工厂模式创建DbContext 代码实现 appsettings.json中的配置项 //使用的数据库类型 "Server ...
- 从零搭建一个IdentityServer——项目搭建
本篇文章是基于ASP.NET CORE 5.0以及IdentityServer4的IdentityServer搭建,为什么要从零搭建呢?IdentityServer4本身就有很多模板可以直接生成一个可 ...