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格式转换的记录的更多相关文章

  1. Qt 格式转换问题 记录(好多方法)

    用Qt经常头痛于一些格式不能通用的问题 在此记录备用 1 (20120112)QString转为Char * QString *str; char *a; str="hello word ! ...

  2. Python datatime 格式转换,插入MySQL数据库

    Python datatime 格式转换,插入MySQL数据库 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-11-2 ...

  3. Python 日期格式转换

    经常需要爬取网站上的时间信息,不同的网站又有不同的日期显示方式.而我需要将日期格式转化为一种特定的格式,所以为了简便和学习,记录下各种不同的日期格式转换. 日期格式化符号: %y :两位数的年份表示( ...

  4. python如何转换word格式、读取word内容、转成html

    # python如何转换word格式.读取word内容.转成html? import docx from win32com import client as wc # 首先将doc转换成docx wo ...

  5. python 将png图片格式转换生成gif动画

    先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...

  6. python中的时间和时间格式转换

    1.python中的时间:要得到年月日时分秒的时间: import time #time.struct_time(tm_year=2012, tm_mon=9, tm_mday=15, tm_hour ...

  7. python 字符串str和json格式转换

    最近在写一个脚本,需要处理从excel中读取的数据,发现读取的json格式数据进行转换时报错 ValueError: Expecting property name enclosed in doubl ...

  8. python 数组格式转换

    格式转换 arr1 = [ {'name': 'jack', 'hobby': '西瓜'}, {'name': 'jack', 'hobby': '冬瓜'}, {'name': 'rose', 'ho ...

  9. Python 数字格式转换

    # 数字格式转换v1 '''a = input() a1 = list(a) b = ["零", "一", "二", "三&quo ...

随机推荐

  1. 使用BigDecimal舍小数取整数

    项目需求说明: 解决WMS系统收货容差问题,例如:SKU的采购数量95件,容差是5,95+95*5/100=99.75,传WMS的数量是99,且容差传零. 参数说明: 其中ROUND_UP:向上取整, ...

  2. MongoDB Sharding(一) -- 分片的概念

    (一)分片的由来随着系统的业务量越来越大,业务系统往往会出现这样一些特点: 高吞吐量 高并发 超大规模的数据量 高并发的业务可能会耗尽服务器的CPU,高吞吐量.超大规模的数据量也会带来内存.磁盘的压力 ...

  3. FAT32、NTFS、exFAT有什么区别?

    文件系统 我们经常会对电脑硬盘.U盘.移动硬盘进行格式化,而在格式化硬盘的时候会弹出文件系统的选项,分别有FAT32.NTFS.exFAT三种格式,那么FAT32.NTFS.exFAT有什么区别? 在 ...

  4. JavaScript入门-对象

    js对象 本篇主要介绍js里如何创建对象,以及for循环访问对象的成员... 什么是对象? 对象,并不是中文里有男女朋友意思,它是从英文里翻译来的,英文叫[Object],目标,物体,物品的意思. 在 ...

  5. 【Linux】iptables配置文件中的一些疑问

    1.看到配置文件中开头会写一句话,但是数值还都不一样 括号里面的数值的含义是:通过该规则的数据包和字节总数 Chain FORWARD (policy DROP 0 packets, 0 bytes) ...

  6. 把vscode打造成技术写作神器

    作为技术开发,大家平时肯定需要记录技术笔记.甚至有的同学还开通可自己的技术博客或者技术公众号进行创作. 这个时候有套趁手的写作工具尤为重要,节省下时间好好休息一下,对于咱们程序员来说更加重要.因为最近 ...

  7. Windows10下Canvas对象获得屏幕坐标不正确的原因排查与处理

    因为Canvas没有直接将画布内容保存为图片的方法,所以很多时候是通过获得Canvas画布的坐标,然后通过截图的方式来将画布内容保存为本地图片. 如何取得Canvas画布的坐标呢,比较简单实用的方式如 ...

  8. 【原创】Linux虚拟化KVM-Qemu分析(八)之virtio初探

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...

  9. JavaWeb三大框架基础架构——CRUD的基础功能搭建

    @ 目录 介绍 注意 applicationContext.xml mybatis-config.xml web.xml 结束语 介绍 项目前端采用了bootstrap,后端是ssm三大框架 注意 这 ...

  10. 转 11 jmeter之图形监控扩展

    11 jmeter之图形监控扩展   Jmeter默认监听器的缺陷 Jmeter默认的监听器在表格.文字方面比较健全,但是在图形监控方面比较逊色,尤其在监控Windows或Linux的系统资源方面.但 ...