zoukankan      html  css  js  c++  java
  • python常用模块

    python常用模块之一

    time模块****

    在Python中,通常有这几种方式来表示时间:

    • 时间戳(timestamp) :         通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
    • 格式化的时间字符串         2018-05-20 19:45:04

    元组(struct_time)   :         struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 18-5-19 下午3:26
    # @Author  : LK
    # @File    : time_modular.py
    # @Software: PyCharm
    
    import time
    #   时间戳  计算
    print(time.time())  #   从1970 年到现在有多少秒
    
    #  结构化时间
    # time.struct_time(tm_year=2018, tm_mon=5, tm_mday=19,
    # tm_hour=15, tm_min=32, tm_sec=0, tm_wday=5, tm_yday=139, tm_isdst=0)
    print(time.localtime())
    t = time.localtime()
    print(t.tm_year)    # 2018
    
    #   结构化时间 转换成时间戳  看图
    print(time.mktime(time.localtime(123213)))
    
    #   将结构化时间转换当成字符串时间  2018-05-19 15:40:38
    print(time.strftime('%Y-%m-%d %X',time.localtime()))
    
    #   将字符串时间装换成结构化时间
    # time.struct_time(tm_year=2018, tm_mon=5, tm_mday=19,
    # tm_hour=15, tm_min=40, tm_sec=38, tm_wday=5, tm_yday=139, tm_isdst=-1)
    print(time.strptime('2018:05:19:15:40:38', "%Y:%m:%d:%X"))
    
    #   Sat May 19 15:46:22 2018
    print(time.asctime())
    print(time.ctime())
    
    import datetime
    # 2018-05-19 15:48:08.429398
    print(datetime.datetime.now())

    时间类型的相互转换

        

    datetime模块****

    可以用来做时间的计算

    print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
    print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
    print(datetime.datetime.now() )
    print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
    print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
    print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
    print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分

    random模块***

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 18-5-19 下午3:51
    # @Author  : LK
    # @File    : 随机模块.py
    # @Software: PyCharm
    
    import random
    
    print(random.randint(0, 9)) #   0到9随机产生一个数
    print(random.random())     # 0-1 float
    print(random.randrange(1, 3)) # [1, 3)
    print(chr(random.randint(65, 122)))  # 产生一个随机字母
    print(random.choice([1, '23', [4, 5]]))  # 在这个列表里面随机选
    print(random.sample([1, '23', [4, 5]], 2))  # 选择两个随机组合
    
    # # 将a转换成ascii ord('a')
    # print(ord('a')) 翻过来chr(数字)
    random
    #   产生一个4位数字和字母的含有字母的验证码
    res = ''
    for i in range(1,5):
        t = random.randint(0, 9)
        s = chr(random.randint(65,90))
        s2 = chr(random.randint(97, 122))
        res += str(random.choice([t,s, s2]))
    print(res)
    验证码

    os模块****

    os是一个提供和系统交互的模块

    #   字符串拼接尽量不用+ 用join, 因为+所占内存是+前和后的
    import os
    
    os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径
    print(os.getcwd())
    os.chdir("dirname")    #改变当前脚本工作目录;相当于shell下cd
    os.curdir  #返回当前目录: ('.')
    os.pardir  #获取当前目录的父目录字符串名:('..')
    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.sep    # 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep  #  输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    os.pathsep   # 输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name   # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command")    #运行shell命令,直接显示
    os.environ  #获取系统环境变量
    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.join(path1[, path2[, ...]])    #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path)    #返回path所指向的文件或者目录的最后存取时间
    os.path.getmtime(path)    #返回path所指向的文件或者目录的最后修改时间
     os.path.getmtime(path)  #返回path所指向的文件或者目录的最后修改时间
    os方法
    import os
    path = os.path.abspath(__file__)
    path2 = os.path.dirname(__file__)
    path3 = os.path.dirname(os.path.abspath(__file__))
    path4 = os.path.split(path3)[0]
    path5 = os.path.join(path4, "test/ogf", "inog")
    print(path)
    print(path2)
    print(path3)
    print(path4)
    print(path5)
    
    结果:
    /home/lk/Desktop/py_project/chapt16/bin/python /home/lk/Desktop/pro_py/模块/model/os_modular.py
    /home/lk/Desktop/pro_py/模块/model/os_modular.py
    /home/lk/Desktop/pro_py/模块/model
    /home/lk/Desktop/pro_py/模块/model
    /home/lk/Desktop/pro_py/模块
    /home/lk/Desktop/pro_py/模块/test/ogf/inog
    简单应用
    #   在win下会把c:/windows\system32\  -->c:\windows\system32\
    os.path.normcase('c:/windows\system32\')
    # 'c:\windows\system32\'
    
    # 规范化路径,如..和 /
    os.path.normpath('c://windows\System32\../Temp/')
    #'c:\windows\Temp'
    
    #   在linux下会---->/ Users / jieli / test1
    a = '/Users/jieli/test1/\a1/\\aa.py/../..'
    print(os.path.normpath(a))
    # / Users / jieli / test1
    路径规范化
    os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    路径处理

    sys模块****

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

    关于argv函数

    直接看效果图

    常用在 登录,就像mysql的登录 mysql -u root -p .....  会把参数自动传给argv然后 在对argv操作,就不用让用户一步一步的输入了

      # 进度条,
    import time
    for i in range(80):
        sys.stdout.write('#')    #  print的底层实现就是利用的这个
        time.sleep(0.1)
        sys.stdout.flush()
    #
    # sys.stdout.write('#')  向屏幕输出内容, 但是要等到缓存完成后,一次性打印
    # sys.stdout.flush()   刷新缓存, 就是如果有内容就输出
    low版进度条
    #=========知识储备==========
    #进度条的效果
    [#             ]
    [##            ]
    [###           ]
    [####          ]
    
    #指定宽度
    print('[%-15s]' %'#')
    print('[%-15s]' %'##')
    print('[%-15s]' %'###')
    print('[%-15s]' %'####')
    
    #打印%
    print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义
    
    #可传参来控制宽度
    print('[%%-%ds]' %50) #[%-50s]
    print(('[%%-%ds]' %50) %'#')
    print(('[%%-%ds]' %50) %'##')
    print(('[%%-%ds]' %50) %'###')
    
    
    #=========实现打印进度条函数==========
    import sys
    import time
    
    def progress(percent,width=50):
        if percent >= 1:
            percent=1
        show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')
        print('
    %s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='')
    
    
    #=========应用==========
    data_size=1025
    recv_size=0
    while recv_size < data_size:
        time.sleep(0.1) #模拟数据的传输延迟
        recv_size+=1024 #每次收1024
    
        percent=recv_size/data_size #接收的比例
        progress(percent,width=70) #进度条的宽度70
    进度条

    json和pickle模块****

    json和pickle类似,就连用法都很像,就是将数据类型转换成字符串存放起来,存到文件中

    pickle的类型多一点,但是他存的格式是byte类型的,所以json比较常用

    #   dump/dumps是将数据转换成字符串,load/loads是将字符串转成数据类型
    
    # pickle  和json类似,方法都一样, 就是pickle保存的数据是不是字符串而知字节, 所以读文件是用'rb', 写文件用'wb'
    # #   pickle 支持的类型更多, 但是json更好用
    # json 在其他语言也能用
    import json
    dic = {'name' : 'luck'} # 用json处理, --> 单引号变成双引号, 然后在最外面在加上""
    data = json.dumps(dic)
    # data是一个字符串类型, json的  就是说是{"name": "luck"},双引号, 这样的话其他语言也可以使用
    print(data)
    print(type(data))   # str
    
    # dic = {'name' : 'luck'}  ---> {"name": "luck"}  ---> str({"name": "luck"})
    # i = 8                    ---> str(8)
    # s = 'hello'              --->"hello"            --->str("hello")
    # l = [11,22]              --->"[11,22]"
    json基本使用
    # 普通的向文件中读写数据时:
    #   如果向文件中存放一个字典, 将下面的字典放到文件中去
    dic = {'name' : 'luck'}
    str_d = str(dic)
    #   写文件
    f_write = open('dic.txt', 'w')
    f_write.write(str_d)
    f_write.close()
    #   读文件
    f_read = open('dic.txt', 'r')
    data = f_read.read()    # z字符串   用eval转换成字典, 列表, 元祖, 但是不能转成类, 函数等
    data  = eval(data)
    print(data, type(data))  # {'name': 'luck'} <class 'dict'>
    f_read.close()

     json读取文件,写文件,

    # 普通的向文件中读写数据时:
    #   如果向文件中存放一个字典, 将下面的字典放到文件中去
    dic = {'name' : 'luck'}
    str_d = str(dic)
    #   写文件
    f_write = open('dic.txt', 'w')
    f_write.write(str_d)
    f_write.close()
    #   读文件
    f_read = open('dic.txt', 'r')
    data = f_read.read()    # z字符串   用eval转换成字典, 列表, 元祖, 但是不能转成类, 函数等
    data  = eval(data)
    print(data, type(data))  # {'name': 'luck'} <class 'dict'>
    f_read.close()
    
    #   思路就是: 现将数据转换成字符串,然后在写入文件,读的时候就是把字符串读出来,然后转换成一定的格式
    #   dumps就相当于将数据转换成字符串, loads相当于将字符串读出来并转换成一定的格式
    #   利用json实现
    import json
    dic = {'name': 'lucky'}
    f_write = open('new.txt','w')  # 只需要将要写的数据传个dumps,返回一个字符串类型的数据
    data = json.dumps(dic)   #  json.dump(dic, f_write)
    f_write.write(data)
    f_write.close()
    #   读数据
    f_read = open('new.txt', 'r')
    data = json.loads(f_read.read())   # json.load(f_read)
    print(data)
    f_read.close()
    json应用
  • 相关阅读:
    python模块之random模块
    python模块之os模块
    python模块之collections模块
    python模块之re模块
    python基础十五之递归函数
    python基础十四之匿名函数
    python基础十三之内置函数
    leetcode 108 和leetcode 109 II
    leetcode 108 和leetcode 109
    对于final修饰的类型运算时的表现
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/9064836.html
Copyright © 2011-2022 走看看