Python tipes

python后端开发过程中的常用技巧进行总结

利用字典的key value进行映射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 状态映射
status_hash = {
u"0": u"待接单",
u"1": u"待出发",
u"2": u"待收获",
u"3": u"已送达",
u"4": u"已取消",
}

data = []
for i in all_data:
tmp_dict = {}
for key, value in status_hash.items():
if str(i["status"]) in key:
tmp_dict["status" ] = value
data.append(tmp_dict)

时间戳和时间互换 & 计算时间差

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
37
38
39
#设a为字符串
import time
a = "2011-09-28 10:00:00"
#中间过程,一般都需要将字符串转化为时间数组
time.strptime(a,'%Y-%m-%d %H:%M:%S')
>>time.struct_time(tm_year=2011, tm_mon=9, tm_mday=27, tm_hour=10, tm_min=50, tm_sec=0, tm_wday=1, tm_yday=270, tm_isdst=-1)
#将"2011-09-28 10:00:00"转化为时间戳
time.mktime(time.strptime(a,'%Y-%m-%d %H:%M:%S'))
>>1317091800.0
#将时间戳转化为localtime
x = time.localtime(1317091800.0)
time.strftime('%Y-%m-%d %H:%M:%S',x)
>>2011-09-27 10:50:00
# 获取当前时间戳
print int(time.mktime(datetime.datetime.now().timetuple()))


# 计算时间差
>>> from time import date
>>> c1 = date(2017, 6, 25)
>>> c2 = date(2017, 6, 28)
>>> (c2-c1).days
3

# 计算明天这个时候的时间戳
>>> import time
>>> import datetime
>>> tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
>>> tomorrow
datetime.datetime(2017, 6, 7, 11, 23, 49, 247665)
>>> print(int(time.mktime(tomorrow.timetuple())))
1496805829
>>> time.localtime(1496805829)
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=7, tm_hour=11, tm_min=23, tm_sec=49, tm_wday=2, tm_yday=158, tm_isdst=0)


# 时间格式化
>>> time.strftime('%Y-%m-%d',time.localtime(1496805829))
'2017-06-07'

Python时间格式化参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

利用正则表达式进行字符串匹配

有关Python正则化的完整整理

1
2
3
import re
if price == "" or quantity == "" or (not re.match('^[0-9.]+$', price)) or (not re.match('^[0-9.]+$', quantity)):
return self.write_err(10013, u'参数为空或有误!')

特殊排序问题

字典为元素的列表 以每个字典中的某个键值的大小进行排序

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
>>> for i in lst:
... print(i)
...
{'level': 20, 'time': 5, 'star': 40}
{'level': 20, 'time': 4, 'star': 40}
{'level': 20, 'time': 3, 'star': 40}
{'level': 20, 'time': 2, 'star': 40}
{'level': 19, 'time': 1, 'star': 36}
{'level': 18, 'time': 1, 'star': 40}
>>> from operator import itemgetter
>>> lst = sorted(lst, key=itemgetter("time")) # 按照time进行排序 从小到大排序 lst.reverse() 从大到小排序
>>>
>>> for i in lst:
... print(i)
...
{'level': 19, 'time': 1, 'star': 36}
{'level': 18, 'time': 1, 'star': 40}
{'level': 20, 'time': 2, 'star': 40}
{'level': 20, 'time': 3, 'star': 40}
{'level': 20, 'time': 4, 'star': 40}
{'level': 20, 'time': 5, 'star': 40}

>>> lst.sort(key=lambda k: (k.get('time', 0)), reverse=True) # 按照time进行排序 从大到小排序
>>> for i in lst:
... print(i)
...
{'level': 20, 'time': 5, 'star': 40}
{'level': 20, 'time': 4, 'star': 40}
{'level': 20, 'time': 3, 'star': 40}
{'level': 20, 'time': 2, 'star': 40}
{'level': 19, 'time': 1, 'star': 36}
{'level': 18, 'time': 1, 'star': 40}

涉及数据库的删除函数的正确写法

先检查是不是有status字段,有的话,就修改,否则才删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def delete(self):
if self.is_post:
ids = self.request.POST.getlist('id')
if ids:
objs = self.model.objects.filter(pk__in=ids)
if hasattr(self.model, 'status'):
objs.update(status = 1)
else:
objs.delete()

if self.is_ajax:
return self.json({'status': 1})

return self.index()

利用时间戳进行时间筛选

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
startdate = start.split("-")
startdate = date(int(startdate[0]), int(startdate[1]), int(startdate[2]))
enddate = end.split("-")
enddate = date(int(enddate[0]), int(enddate[1]),int(enddate[2]))
temp_time = convert_time(i["create_time"])
if 0 <= (temp_time - startdate).days and (temp_time - enddate).days <= 0:
data.append(i)

# 一个将“2017-08-01”格式的字符串或者时间戳转换为datetime.date Object的函数
def convert_time(target_date):
if isinstance(target_date, str):
temp_date = data["start"].split("-")
temp_date = date(int(temp_date[0]), int(temp_date[1]), int(temp_date[2]))
else:
a = time.localtime(target_date)
temp_date = date(int(a.tm_year), int(a.tm_mon), int(a.tm_mday))
return temp_date

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!