• python模块补充


    collections模块

      collections模块namedtupe方法。又称具名元组。

    from collections import namedtuple
    point = namedtuple('空间坐标', 'x y z')    # x y z可以写成列表形式,元组等可迭代对象
    res = point(3, 4, 5)
    print(res)       # 空间坐标(x=3, y=4, z=5)
    print(point(3, 4, 5).x)     # 提取x  结果 3
    print(point(3, 4, 5).y)     # 提取y  结果 4
    print(point(3, 4, 5).z)     # 提取z   结果 5

      队列queue

    # 队列先进先出
    import queue
    q = queue.Queue()
    q.put('1')     # 先进1
    q.put('2')     # 在进2
    q.put('3')     # 最后进3
    
    print(q.get())  # 结果 1
    print(q.get())   # 结果2
    print(q.get())   # 结果3
    # 注使用queue方法时,取值借助get函数。当值取完后仍取值,程序会原地等待,直到拿到值为止

    双端序列deque。从左右两边都可添加值进去,但仍然按照队列规则,先进先出。

    from collections import deque
    q = deque(['x','y','z'])  
    q.append(1)
    q.appendleft('a')
    print(q)    # deque(['a', 'x', 'y', 'z', 1])
    print(q.popleft())  # 结果 a
    print(q.pop())  # 1

    有序字典OrdereDict。

    # 有序字典在其中添加键值,会在后面追加,这个排序位置不变。
    from collections import OrderedDict
    dict_queue = OrderedDict([(1,'A'), (2,'B')])
    
    dict_queue['a'] = 1
    dict_queue['b'] = 2
    print(dict_queue)

    默认值字典defaultdict

    from collections import defaultdict
    my_dict = defaultdict(list)    # 设置默认值位为列表
    print(my_dict['a'])  # []
    print(my_dict)    # 结果defaultdict(<class 'list'>, {'a': []})

    计数字典counter

    from collections import Counter
    s = 'dadfsfgjhafgbkafha'
    s1 = Counter(s)
    print(s1)     # 结果 Counter({'a': 4, 'f': 4, 'd': 2, 'g': 2, 'h': 2, 's': 1, 'j': 1, 'b': 1, 'k': 1})

     时间模块(time/datatime)

      time模块有三种表现形式。

    1 时间戳。显示现在距离1970年1月1日零时零分零秒

    import time
    print(time.time())   # 1563442767.252297

    2 格式化时间

    import time
    my_time = time.strftime('%Y-%m-%d %H:%M:%S')
    print(my_time)   # 结果 2019-07-18 17:42:09
    
    my_time1 = time.strftime('%Y-%m-%d %X')
    print(my_time1)   # 结果 2019-07-18 17:43:38
    
    my_time2 = time.strftime('%Y-%m')
    print(my_time2)   # 结果  2019-07
    
    my_time3 = time.strftime('%X')
    print(my_time3)   # 结果  17:45:32

    3 结构化时间

    import time
    my_time = time.localtime()
    print(my_time)  # 结果 time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=17, tm_min=48, tm_sec=22, tm_wday=3, tm_yday=199, tm_isdst=0)

    三种形式之间的转化

    '''
    三种形式的互选转换
    '''
    # 结构化时间与时间戳之间的转化
    import time
    my_1time = time.time()    # 时间戳
    my_3time = time.localtime(my_1time)  # 等价于my_3time1 = time.gmtime(my_1time) 转结构化时间
    print(my_3time)  # 结果 time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=18, tm_min=19, tm_sec=21, tm_wday=3, tm_yday=199, tm_isdst=0)
    my_1time1 = time.mktime(my_3time)   # 结构化时间转时间戳
    print(my_1time1)  # 结果 1563445161.0
    
    # 结构化时间于格式化时间的转化
    my_2time = time.strftime('%Y-%m-%d')    # 格式化时间
    my_2time1 = time.strftime('%Y-%m-%d %X', time.localtime(1563445161))  # 转格式化时间
    print(my_2time1) # 结果 2019-07-18 18:19:21
    my_3time = time.strptime('2019-07-18',my_2time) #转结构化时间(my_2time中格式化时间到天,否则报错)
    print(my_3time)

    datetime时间模块

    import datetime
    my_time = datetime.date(2019,6,11)  # 自定义化时间
    print(my_time)  # 结果  2019-06-11
    my_time1 = datetime.date.today()  # 当前时间
    print(my_time1)  #结果2019-07-18
    my_time = datetime.datetime.today()  # 精确时间获取
    print(my_time)  # 结果 2019-07-18 18:59:00.905379
    
    # 获取年月日
    print(my_time.year)    # 结果 2019
    print(my_time.month)   # 结果 7
    print(my_time.day)     # 结果 18
    print(my_time.weekday())   # 结果 3
    print(my_time.isoweekday())  # 结果 4
    
    # datetime运算操作
    import datetime
    now_day = datetime.date.today()   # 日期对象
    last_day = datetime.timedelta(days=7)  # timedate对象
    
    rec = now_day + last_day   # 日期对象 + timelate对象
    print(rec)   # 日期对象 :结果2019-07-25
    rec1 = rec - now_day  # 日期对象 - 日期对象
    print(rec1)  # timedate对象 结果 7 days, 0:00:00

     随机模块random

    #随机数获取
    import random
    print(random.random())   # 获取0到1之间的数           结果:0.21267928084158305
    print(random.uniform(1, 10))  # 获取1到10之间的数     结果:6.744952496036854
    print(random.randint(1, 10))  # 获取1(包括1)到10(包括10)之间的整数     结果:3
    print(random.choice('123'))  # 获取字符串中的一个元素。(可迭代对象)     结果:3
    print(random.sample([1,'23',3,[4,5]],2)) # 获取字符串中的两个元素。(可迭代对象)     结果:['23', [4, 5]]

    sys模块

      sys模块和python解释器紧相关

    sys.argv           命令行参数List,第一个元素是程序本身路径
    sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
    sys.version        获取Python解释程序的版本信息
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform       返回操作系统平台名称

    os模块

      os模块于操作系统相关

    os.makedirs('dirname1/dirname2')    可生成多层递归目录
    os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    os.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息
    
    os.system("bash command")  运行shell命令,直接显示
    os.popen("bash command).read()  运行shell命令,获取执行结果
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    
    os.path
    os.path.abspath(path) 返回path规范化的绝对路径
    os.path.split(path) 将path分割成目录和文件名二元组返回 
    os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 
    os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
    os.path.isabs(path)  如果path是绝对路径,返回True
    os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
    os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
    os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
    os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
    os.path.getsize(path) 返回path的大小
    os模块操作

    序列化

     序列是指字符串,序列化就是将其他数据类型转化成字符串的过程。反序列化就是将字符串转化成其他数据的过程。序列化有两个模块,json模块和pickle模块。两者有些不同,json支持多种编程语言,适用范围广泛,但支持数据类型少。pickle模块支持python所有数据类型,但是对于其他编程语言不支持。

    序列化和反序列化json有四种方法。

    dumps 与 loads
    dump 与 load
    '''
    
    import json
    str1 = 'abcdefg'
    dict1 = {}
    for k, v in enumerate(str1, 1):
        dict1[v] = k
    str_dict = json.dumps(dict1)
    print(str_dict, type(str_dict))
    yuan_dict = json.loads(str_dict)
    print(yuan_dict, type(yuan_dict))
    
    f = open('json_file','w')
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
    f.close()
    
    f = open('json_file')
    dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
    f.close()
    print(type(dic2),dic2)
    View Code
  • 相关阅读:
    维护gcd的线段树 补发一波。。。
    BZOJ 4720: [Noip2016]换教室
    P2184 贪婪大陆 树状数组
    BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞
    POJ3280 Cheapest Palindrome 区间DP
    BZOJ 2288: 【POJ Challenge】生日礼物 堆&&链表
    BZOJ 4236: JOIOJI map瞎搞
    浅谈最近公共祖先(LCA)
    题解 BZOJ 1912 && luogu P3629 [APIO2010]巡逻 (树的直径)
    [笔记] 求树的直径
  • 原文地址:https://www.cnblogs.com/huaiXin/p/11208668.html
Copyright © 2020-2023  润新知