Monthly Archives: 八月 2021

Hello World

php is_numeric 的使用限制

项目里有个地方需要拼insert语句,对于字段值,非数字类型需要加引号,图省事、通用,直接用is_numeric做了判断,上线运行一段时间,还挺顺利
不过今天突然发现,项目出错了,mysql insert执行报错
“Invalid datetime format: 1367 Illegal double ’523e09488200002′ value found during parsing”
于是缩短insert条数、以便日志打印出整个出错sql,果然,’523e09488200002′没有被当成字符串处理,没有加引号
简单测试发现,果然,is_numeric(’523e09488200002′),返回是true 咕~~(╯﹏╰)b

第一反应:php的bug,还是被当成16进制了?
于是多试了几个类似的字符串
———–
523a09488200002: 字符串
523b09488200002: 字符串
523e09488200002: 数字
523f09488200002: 字符串
524e094213214: 数字
523e59: 数字
234e234: 数字
e: 字符串
2e5: 数字
12e: 字符串
—————-
只有“e”被特殊照顾。。。顿悟:科学计数法
进一步查了一下is_numeric的使用限制,不仅科学计数法,前置“0x”、中置“.”、前置“-”,都会被当成数字,返回true
所以这里再用is_numeric的话,就要注意了,要再加一层判断逻辑

———-
转载请注明出处:http://www.jiangkl.com/2021/08/php-is_numeric-bug

Hello World

使用pandas+openpyxl生成多子表excel

虽然python+pandas自身有强大的数据分析和展现能力,可实际工作中,不是每个人都会coding的,所以,有时候把粗加工的数据,以excel的形式提供数据,会更灵活、更适合大部分,这里介绍一种可以生成多子表excel的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import pandas as pd
from openpyxl import Workbook
from openpyxl.reader.excel import load_workbook
 
#数据暂存容器
xlsDatas = {}
#保存路径
savePath = '.../test-excel.xlsx'
#获取数据
df1 = pd.DataFrame(
    {
        '日期': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'], 
        '订单数': [1234, 1321, 3456, 6543],
        '用户数': [234, 787, 987, 545]},
    columns=['日期', '订单数', '用户数']
)
xlsDatas['概况'] = df1  #子表名-子表数据
df2 = pd.DataFrame(
    [
        [56335, '兰州拉面', 15.0, '2021-01-01 12:12:12'], 
        [45135, '山西削面', 13.0, '2021-01-01 12:16:12'], 
        [16335, '兰州拉面', 15.0, '2021-01-01 12:32:12']
    ],
    index=list('123'),
    columns=['用户id', '产品名称', '消费金额', '消费日期']
)
xlsDatas['订单列表'] = df2
#使用Workbook保存数据
book0 = Workbook()
book0.save(savePath) #先保存一个空excel文件,然后往里塞子表,实际会有一个空的Sheet子表
book = load_workbook(savePath)
writer = pd.ExcelWriter(savePath, engine='openpyxl') #选择openpyxl引擎
writer.book = book
for k in xlsDatas :
    xlsDatas[k].to_excel(writer, sheet_name=k)
writer.save()

————
over
转载请注明出处:http://www.jiangkl.com/2021/08/pandas_openpyxl_excel