zoukankan      html  css  js  c++  java
  • 十一、常用内建模块

    datetime:

      表示的时间需要时区信息才能确定一个特定的时间,否则只能视为本地时间。如果要存储datetime,最佳方法是将其转换为timestamp再存储,因为timestamp的值与时区完全无关。

      datetime.strptime() :转换为str; timedelta :加减

     1 from datetime import datetime,timedelta,timezone
     2 # 获取当前时间;
     3 now = datetime.now()
     4 print(now)
     5 print(now.strftime('%Y-%m-%d %a %b %H:%M:%S'))  #把当前时间格式化为str;
     6 now = now + timedelta(days=1,hours=2)   #datetime的加减,datedelta
     7 print(now)
     8 
     9 输出:
    10 2019-01-02 11:18:16.947696
    11 2019-01-02 Wed Jan 11:18:16
    12 2019-01-03 13:18:16.947696

     tzinfo :时区属性;  utcnow() :获取当前UTC时间;  astimezone() :转换到任意时区; replace() :设置

     1 from datetime import datetime,timedelta,timezone
     2 now = datetime.now()
     3 #本地时间转换为UTC时间,
     4 tz_utc_8=timezone(timedelta(hours=8))
     5 print(tz_utc_8)
     6 #强制设置当前的UTC时间
     7 dt = now.replace(tzinfo=tz_utc_8)
     8 print(dt)
     9 #拿到UTC时间,并强制设置时区为UTC+0:00:
    10 utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
    11 #astimezone()转换时区为北京时间:
    12 bj_utc = utc_dt.astimezone(timezone(timedelta(hours=8)))
    13 print(utc_dt,bj_utc)
    14 
    15 输出:
    16 UTC+08:00
    17 2019-01-02 11:19:35.873844+08:00
    18 2019-01-02 03:19:35.873844+00:00 2019-01-02 11:19:35.873844+08:00

    fromtimestamp() :转为datetime; timestamp() :转为浮点数; utcfromtimestamp() :UTC时间; strftime() :datetime转为str; strptime() :str转为datetime

     1 from datetime import datetime,timedelta,timezone
     2 #用指定日期时间创建:datetime;
     3 m = datetime(2019,1,2,3,4,5)
     4 n = m.timestamp()       #把datetime转换为timestamp,浮点数;
     5 print(m,n)
     6 print(datetime.fromtimestamp(n))    #把timestamp转换为datetime;
     7 print(datetime.utcfromtimestamp(n))     #转换为UTC时间;
     8 day_1 = datetime.strptime('2015-1-1 1:1:1','%Y-%m-%d %H:%M:%S') #str转换为datetime
     9 day_2 = day_1.strftime('%Y-%m-%d %a %b %H:%M:%S')   #datetime转换为str
    10 print(day_1,day_2)
    11 
    12 输出:
    13 2019-01-02 03:04:05 1546369445.0
    14 2019-01-02 03:04:05
    15 2019-01-01 19:04:05
    16 2015-01-01 01:01:01 2015-01-01 Thu Jan 01:01:01

     转换字符串的时间

     1 from datetime import datetime
     2 
     3 # 将当前时间转换为时间戳
     4 local_time = datetime.now().timestamp()
     5 print(local_time)
     6 
     7 # 输出
     8 1610521987.994504
     9 
    10 # 转换字符串为时间格式
    11 t = datetime.strptime('2021-1-10T10:10:10.789+08:00', '%Y-%m-%dT%H:%M:%S.%f%z')
    12 print(t)
    13 
    14 # 输出
    15 2021-01-10 10:10:10.789000+08:00
    16 
    17 # 将字符串转为时间戳,需先转为时间格式
    18 d_time = datetime.strptime('2021-1-10T10:10:10+00:00', '%Y-%m-%dT%H:%M:%S%z')
    19 local_time = d_time.timestamp()
    20 print(local_time)
    21 
    22 # 输出
    23 1610244610.0
    24 
    25 # 将时间戳转换为字符串
    26 s_time = datetime.fromtimestamp(1610244610.0)
    27 local_time = s_time.strftime('%Y-%m-%dT%H:%M:%S%z')
    28 print(local_time)
    29 
    30 # 输出
    31 2021-01-10T10:10:10

    collections:Python内建的一个集合模块,提供了许多有用的集合类。(参考:python官网文档

    • namedtuple:创建一个自定义的 tuple 对象,并且规定了 tuple 元素的个数,可用属性来引用其元素
       1 from collections import namedtuple
       2 # namedtuple('名称', [属性list]):
       3 Point = namedtuple('Point',['x','y'])
       4 Circle = namedtuple('Circle',['x','y','r'])
       5 p = Point(1,2)
       6 c = Circle(1,2,3)
       7 print(p.x)
       8 print(c.r)
       9 
      10 输出:
      11 1
      12 3
    • deque:高效实现插入 append 和删除 pop 操作的双向列表,适合用于队列和栈。( list 是线性存储,数据量大的时候,插入和删除效率很低。)
      1 from collections import deque
      2 l = deque(['a','b','c'])
      3 l.append('x')
      4 l.appendleft(0)
      5 # l.pop()   #默认删除最后一个
      6 print(l)
      7 
      8 输出:
      9 deque([0, 'a', 'b', 'c', 'x'])
    • defaultdict:接受一个工厂函数作为参数,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值
      dict =defaultdict( factory_function)

       factory_function 可以是list、set、str等,当 key 不存在时,返回工厂函数的默认值,如 list 对应 [ ] , str 对应 空字符串 , set 对应 set( ) , int 对应 0

       1 from collections import defaultdict
       2 s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
       3 # d = {}
       4 # for k,v in s:
       5 #     d.setdefault(k,[]).append(v)
       6 d = defaultdict(list)
       7 for k,v in s:
       8     d[k].append(v)
       9 print(sorted(d.items()))
      10 
      11 dic = defaultdict(lambda :'x')
      12 print(dic['key'])
      13 
      14 输出:
      15 [('blue', [2, 4, 4]), ('red', [1, 3, 1])]
      16 x
    • OrderedDict:保持 Key 的顺序,使用 dict 时, Key 是无序的。 OrderedDict 的 Key 会按照插入的顺序排列,不是 Key 本身排序:
      1 from collections import OrderedDict
      2 d = OrderedDict([('a',1),('b',2),('c',3)])
      3 print(d['a']
    • ChainMap:把一组 dict 串起来并组成一个逻辑上的 dict 。 ChainMap 本身也是一个 dict ,查找的时候,会按照顺序在内部的dict依次查找,用户指定的命令行参数优先于环境变量的示例,而环境变量优先于默认值(参照:python官网文档解析
       1 from collections import ChainMap
       2 import os,argparse
       3 
       4 default = {'color':'red','user':'guest'}
       5 parser = argparse.ArgumentParser()
       6 parser.add_argument('-u','--user')
       7 parser.add_argument('-c','--color')
       8 namespace = parser.parse_args()
       9 command_line_args = {k:v for k, v in vars(namespace).items() if v}
      10 combined = ChainMap(command_line_args,os.environ,default)
      11 print(combined['color'])
      12 print(combined['user'])
      13 
      14 输出:
      15 red
      16 guest
    • Counter:计算器,统计字符出现的个数
      1 from collections import Counter
      2 c = Counter()
      3 for ch in 'programming':
      4     c[ch] = c[ch] + 1
      5 print(c)
      6 
      7 输出:
      8 Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})

    base64:用64个字符来表示任意二进制数据的方法(二进制编码方法),要编码的二进制数据不是3的倍数时,在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉

    1 import base64
    2 print(base64.b64encode(b'binaryx00string'))
    3 print(base64.b64decode(b'YmluYXJ5AHN0cmluZw=='))
    4 
    5 输出:
    6 b'YmluYXJ5AHN0cmluZw=='
    7 b'binaryx00string'

    标准的Base64编码后可能出现字符+/,在URL中就不能直接作为参数,使用urlsafe 把字符+/分别变成-_:

    1 import base64
    2 print(base64.b64encode(b'ixb7x1dxfbxefxff'))
    3 print(base64.urlsafe_b64encode(b'ixb7x1dxfbxefxff'))
    4 
    5 输出:
    6 b'abcd++//'
    7 b'abcd--__'
     1 import base64
     2 #去掉‘=’号的base64解码函数
     3 def safe_base64_decode(s):
     4     num = len(s) % 4
     5     if num != 0:
     6         for x in range(0, num):
     7             s += b"="
     8     return base64.b64decode(s)
     9  assert b'abcd' == safe_base64_decode(b'YWJjZA=='), safe_base64_decode('YWJjZA==')
    10 assert b'abcd' == safe_base64_decode(b'YWJjZA'), safe_base64_decode('YWJjZA')
    11 print('ok')
    12 
    13 输出:
    14 ok

    struct:解决 bytes 和其他二进制数据类型的转换, pack 函数第一个参数是处理指令: >I 表字节顺序是big-endian,也就是网络序, I表示4字节无符号整数; >IH 表示 I  4字节无符号整数和 H 2字节无符号整数;

    1 import struct
    2 print(struct.pack('>I', 10240099))
    3 print(struct.unpack('>IH', b'xf0xf0xf0xf0x80x80'))
    4 
    5 输出:
    6 b'x00x9c@c'
    7 (4042322160, 32896)

    (hashlib、hmac、itertools、contextlib、urllib、XML、HTMLParser   --> 后续模块参考 ==> 廖雪峰的python教程

  • 相关阅读:
    nopcommerce商城系统--源代码结构和架构
    nopcommerce商城系统--如何编写一个插件
    ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
    【js与jquery】电子邮箱、手机号、邮政编码的正则验证
    也用 Log4Net 之走进Log4Net (四)
    也用 Log4Net 之将自定义属性记录到文件中 (三)
    也用 Log4Net 之将日志记录到数据库的后台实现 (二)
    也用 Log4Net 之将日志记录到数据库的配置 (一)
    log4net 将日志写入数据库
    ASP.NET MVC 3 入门级常用设置、技巧和报错
  • 原文地址:https://www.cnblogs.com/liqiongming/p/10206295.html
Copyright © 2011-2022 走看看