1:JSON写入中文到文件内
最近在用Python做接口请求,以及批量生成接口所需Data。再此过程中发现一些小问题。
起初是用pycharm生成数据,再用JSON模块转JSON格式通过requests模块上传数据。可能是pycharm默认是UTF-8编码格式,通过requests模块上传后,程序数据库内中文显示正常。
但是后来我只用pycharm批量生成数据以JSON格式写入到TXT文本(文本打开模式已经指定:encoding = 'utf-8')内,打开TXT文本发现,中文全部以Unicode编码保存了。
通过上面截图可以看出,第一个print输出的信息内中文是以Unicode编码格式展示的。
下面一个print才真正的以中文显示了。
通过上面print对比可以发现。在json.dumps('所需参数',ensure_ascii=False)。添加:ensure_ascii=False。可以解决此类问题,文件写入以此同理。
原因说明
这是因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
# 示例代码
import json
print(json.dumps('Python自学之路'))
# 输出结果:"Python\u81ea\u5b66\u4e4b\u8def"
print(json.dumps('Python自学之路',ensure_ascii=False))
# 输出结果:"Python自学之路"
2:自动生成想要的日期
由于项目所需数据为借还款数据,因此参数内需携带订单日期(年月日时分秒),还款日期(年月日)。
一开始并没有发现有这个模块,实现方式如下。
因为在17年12月底。每天的日的数字都大于7。所以生成的日期看似没什么问题。
但是节后回来我一运行程序就报错了,后来我调试输出了下,才发现这个问题。就像下图一样的结果,这种日期表现方式明显不对。
后来只能求救度娘,谷哥了。
果不其然,Python开发者们早就预料到此种应用方式。官方模块里都已经自带这种操作方式。
# 示例代码
from datetime import datetime, timedelta
d = datetime.now()
# 以下两种方法同价,看个人习惯爱好使用
for a in range(1,8):
d1 = d - timedelta(days=a)
print(d1)
# 输出结果
# 2018-01-04 10:30:52.420493
# 2018-01-03 10:30:52.420493
# 2018-01-02 10:30:52.420493
# 2018-01-01 10:30:52.420493
# 2017-12-31 10:30:52.420493
# 2017-12-30 10:30:52.420493
# 2017-12-29 10:30:52.420493
print('')
for a in range(-7,0):
d1 = d + timedelta(days=a)
print(d1)
# 输出结果
# 2017-12-29 10:30:52.420493
# 2017-12-30 10:30:52.420493
# 2017-12-31 10:30:52.420493
# 2018-01-01 10:30:52.420493
# 2018-01-02 10:30:52.420493
# 2018-01-03 10:30:52.420493
# 2018-01-04 10:30:52.420493
使用总结
想生成某日日期,通过改变days变量就可以轻松达到效果。
以上为本人使用过程中遇到的小问题,通过度娘,谷哥,获取到各位前辈的使用技巧。使工作效率大大提升。
领取专属 10元无门槛券
私享最新 技术干货