python日期格式转换总结

Q:问什么做这个整理?

A:在python项目开发过程中,经常遇到日期时间转换的操作,和php仅两个简单的转换函数不同,python的时间日期库函数较多,语义化不是很清晰,需要对datetime或time库函数非常熟悉才能熟练运用,而且网上随便搜一搜,得到的都是各种案例,没有一种通用的使用说明文档,导致每次都要重复search,效率很低,于是结合部分网友总结及对python时间日期库的查阅,总结了以下相对通用的方法,简单易记,减少浪费过多时间在这上面。

日期转换常见场景

  • timestamp to string
  • string to timestamp

datetime转换场景

  • timestamp to datetime struct
  • string to datetime struct
  • datetime struct to timestamp
  • datetime struct to string

通用转换流程及方法

1. timestamp -> datetime/time struct -> string

1
1667555103 -> datetime/time struct -> 2022-11-04 17:45:03 | 20221104 | 2022/11/04 等format

方法1 datetime组件

  • datetime_struct = datetime.datetime.utcfromtimestamp(1667555103)
  • string = datetime_struct.strftime(“%Y-%m-%d %H:%M:%S”)

方法2 time组件

  • time_struct = time.localtime(1667555103)
  • string = time.strftime(“%Y-%m-%d %H:%M:%S”, time_struct)

2. string -> datetime/time struct -> timestamp

1
2022-11-04 17:45:03 | 20221104 | 2022/11/04 等format -> datetime/time struct -> 1667555103

方法1 datetime组件

  • datetime_struct = datetime.datetime.strptime(string, “%Y-%m-%d %H:%M:%S”)
  • stamp = datetime_struct.timestamp()

方法2 time组件

  • datetime_struct = datetime.datetime.strptime(string, “%Y-%m-%d %H:%M:%S”)
  • time.mktime(datetime_struct.timetuple())

具体案例

Read More

关于Guzzle http的使用总结

What is the difference between form data and request payload?

if a request (typically POST) has Content-type header set to application/x-www-form-urlencoded the body is expected to be in the form of a standard querystring with url-encoded key=value pairs joined by &. Form data section then shows the key-value parameters (when viewed parsed). This way was much more common in past because it is a default for HTML forms. other cases are shown in Request payload section (and nowadays parsed for readability as well for common formats like JSON).

Form Data 和 Request Payload 区别

如果请求头里设置Content-Type: application/x-www-form-urlencoded,那么这个请求被认为是表单请求,参数出现在Form Data里,格式为key=value&key=value&key=value...原生的AJAX请求头里设置Content-Type:application/json,或者使用默认的请求头Content-Type:text/plain;参数会显示在Request payload块里提交。

Read More

Redis常用命令学习总结

redis命令总结
http://redisdoc.com/index.html

场景1:字符串

redis的key-value结构中,value是字符串,起缓存作用,可设置过期时间,比如session,适用于读比较频繁的场景

常用命令

1
2
3
4
5
6
7
8
9
SET key value
GET key
SETEX key seconds value
PSETEX key milliseconds value
SETNX key value
MGET key [key ...]
MSET key value [key value ...]
INCR key(INCRBY key increment)
DECR key(DECRBY key decrement)

场景2:哈希表

redis的key-value结构中,value是哈希表结构,那什么是哈希表呢?

哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。

在redis中的使用场景,比如系统只分配一个redis的key给我们,现在需要存储各个用户在每条的访问量;key可以设置成日期相关,value是各个用户及其访问量;

1
2
3
4
5
key:  pv_20180323
value:
tayloryu 80
xiaoming 90
zhangsan 100

还比如每条数据上报的错误量,发送量,接收量,按天,按小时,按分钟设置成field,像目前的模调、Agent业务

Read More

linux常用命令之sed

sed工作原理:

sed在正常情况下,将处理的行读入模式空间,脚本中的sed命令就一条接着一条进行处理,直到脚本执行完毕。然后该行被输出,模式空间被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。【读入的每一行删除行尾的换行符放入模式空间,再执行所有命令,执行完所有的命令之后,再加回删过的换行符并打印到输出】

sed替换操作(s命令)

  • 使用后缀 /g 标记会替换每一行中的所有匹配, /n表示替换每一行第n处匹配
  • sed -i 表示在源文件基础上修改

Read More

shell脚本由点到面学习总结

以前只是零零散散写过一些简单的命令行,比如awk、sed、nc、ls、comm这些简单的命令,几乎没有写过一个完整的shell脚本,像循环、条件判断、数据库操作等几乎都没怎么写过,总觉得shell写起来太麻烦,要学习的东西太多了,其实主要是懒。这次由于业务需要,使用shell脚本能方便解决问题,便硬着头皮上了,借着这个机会把常用的命令整理一下,算作温习吧。

实现功能:

将下面未经处理的原始数据,批量导入到es,并记录导入的数据源;

1
2
3
4
5
6
7
20170101        ABCD-EF-G001-12345678    1rt2xete3   CD      1.1977199809152
20170101 ABCD-EF-G001-12345678 1rt2xete4 CD 5.856237342947999
20170101 ABCD-EF-G001-12345678 1rt2xete5 CD 5.1901199172992
20170101 ABCD-EF-G001-12345678 1rt2xete6 CD 0.748574988072
20170101 ABCD-EF-G001-12345678 1rt2xete7 CD 2.4472449769392
20170101 ABCD-EF-G001-12345678 1rt2xete8 CD 9.62620145261278
20170101 ABCD-EF-G001-12345678 1rt2xete9 CD 0.1249524996024

Read More

Eloquent ORM多个and和or条件查询

Eloquent ORM和查询构造器Query Builder

1
2
3
Model::all();
Model::where();
Model::groupBy()->select('field_name')->get()->toArray()

之前一直使用ORM,后面可以尝试使用查询构造器,ORM相比查询构造器,不需要指定table_name和field等信息,但是也有局限性,比如我们经常会需要查询指定字段field
对于查询构造器而言是十分方便的select字段名接近原生查询方法,易理解易记忆。

Read More

vuejs与后台数据的交互实践

Vuejs是MVVM框架,数据和DOM视图双向绑定,数据驱动的 web 界面的库。

响应的数据绑定:数据与DOM保持同步非常简单,数据发生变化的时候,如果我们使用JQuery操作DOM的话自然是可行的,但是jQuery操作DOM代码复杂容易出错,就拿一个简单的例子,在列表中新增一行数据,使用JQuery可能会刷新整个DOM,并对页面refresh。但是vue实现数据与DOM的绑定后,只要数据发生变化,就自动改动DOM,所以我们的工作重点就是修改数据,不必与DOM更新搅在一起。

我的理解:Vuejs简化了操作DOM或者不再去手动操作DOM,一个简单的API就搞定了DOM的自动更新,让我们脱离了使用Js操作DOM的复杂流程。这也是Vue的迷人之处吧,其他的优点诸如:组件化、模块化、体积小等优点我就不再罗列了,本文重点也不在此。

Read More

判断一个整数的二进制中1的个数

无意间看到这个题目,最先想到是将整数转换成二进制,然后再统计这个二进制中有多少个1。对于php而言,这很容易实现,转成二进制可用decbin()这个函数,然后将二进制数按1位进行分割用str_split(),最后对分割后的数值进行foreach即可完成数据的统计,实际上这是最low的解决方案,网上大多数使用下面的算法进行求解,觉得很巧妙,于是就mark了!

Read More