zoukankan      html  css  js  c++  java
  • 27 os 模块 序列化模块 sys模块 时间模块

    主要内容:

    1 : 时间模块

      a: 时间戳时间 ,格林威治时间, float数据类型 ,给机器用的

        英国伦敦时间  1970.1.1  0:0:0

        北京时间          1970.1.1 8:0:0

      time.time()        获取时间戳时间

    import time
    print(time.time())

      b: 结构化时间,时间对象,能够通过.属性名来获取对象中的值.

        time.localtime()  获取结构化时间

    struct_time = time.localtime()
    print(struct_time)   #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=19, tm_min=13, tm_sec=37, tm_wday=2, tm_yday=220, tm_isdst=0)

      c: 格式化时间: 字符串时间, str数据类型,给人看的

        time.strftime()    获取格式化时间

    struct_time = time.localtime()
    print(struct_time)   #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=19, tm_min=13, tm_sec=37, tm_wday=2, tm_yday=220, tm_isdst=0)
    

      d: 三种模式之间的转换

        1)  格式化时间--> strptime('格式化时间','%Y-%m-%d') <--结构化时间<-- mktime(结构化时间) -->时间戳时间

    import time
    formatstring = time.strftime('%y-%m-%d')
    struct_time = time.strptime(formatstring,'%y-%m-%d')
    timestamp = time.mktime(struct_time)
    print(timestamp)
    

        2)  时间戳时间--> localtime(timestamp)<--结构化时间-->strftime('时间格式',格式化时间)

    import time
    timestamp = time.time()
    struct_time = time.localtime(timestamp)
    print(struct_time)
    formatsring = time.strftime('%y-%m-%d',struct_time)
    print(formatsring)
    

      e: 一道题:计算本地一月的时间戳时间

    import time
    formatstring = time.strftime('%y-%m-1')
    struct_time = time.strptime('formatstring','%y-%m-%d')
    timestamp = time.mktime(struct_time)
    print(timestamp)
    

        第二种方法:

    import time
    struct_time = time.localtime()
    struct_time = time.strptime('%s-%s-1' % (struct_time.tm_year,struct_time.tm_mon),'%Y-%m-%d')
    timestamp = time.mktime(struct_time)
    print(timestamp)
    

    2 . sys模块  :跟python解释器打交道的(sys模块是与python解释器交互的一个接口)

      a: sys.platform  :返回操作系统平台名称

      b: sys.exit()        退出程序

    import sys            #跟python解释器打交道的
    print(sys.platform)   #操作平台win32
    sys.exit()            #结束程序再写print会报错
    print(123)
    

      c: sys.argv    : 命令行参数list

        1) :返回一个列表 

          第一个元素, 是执行这个文件的时候, 写在python命令后面的第一个值,

          之后的元素,在执行python的启动的时候可以写多个值, 都会被依次添加到列表中.

        2): 用处

    name = sys.argv[1]
    pwd = sys.argv[2]
    if name == 'alex' and pwd == 'alex3714':
        print('执行以下代码')
    else:
        exit()
    

    3 . os模块

      a: 创建和删除文件夹

        创建文件夹:

    import os
    os.mkdir('dir')  # ftp 网盘                     生成单级文件夹
    os.mkdir('dir/dir5')  # ftp 网盘
    os.makedirs('dir2/dir3/dir4',exist_ok=True)    生成多级文件夹
    

        删除文件夹:

    os.remove('dir2/dir3/dir4/aaa.py')             删除文件
    os.rmdir('dir2/dir3/dir4')                     不能删除一个非空文件夹 ,删除单级文件夹
    os.removedirs('dir2/dir3/dir4')
    递归向上删除文件夹,只要删除当前目录之后 发现上一级目录也为空了,就把上一级目录也删掉.
    如果发现上一级目录有其他文件,就停止
    

      b: os.listdir:  列出指定目录下的所有文件和子目录,并以列表方式打印.

    import os
    print(os.listdir(r'C:Users26897PycharmProjectsuntitledWorkspace'))
    # ['day  20', 'day 02', 'day 21 反射', 'day01', 'day03', 'day04', 'day05', 'day06', 'day07', 'day08', 'day09', 'day10', 'day11考试', 'day12', 'day13', 
    'day14', 'day15', 'day16 类,对象调用类中的变量和方法', 'day17 类,对象的查询空间,组合', 'day18 继承,单,多继承;新式类,经典类', 'day22 考试', 'day23', 'day24', '
    day25 正则表达式', 'day26', 'day27', '作业', '学生选课']

      c :

    import os
    print(os.stat(r'C:Users26897PycharmProjectsuntitledWorkspaceday25 正则表达式练习.py')) #获取文件目录信息
    print(os.sep)  # 当前你所在的操作系统的目录分割符    /a/dir/dir2
    print([os.linesep])  #输出当前平台使用的行终止符,win下为"
    ",Linux下为"
    "
    print(os.pathsep) #   输出用于分割文件路径的字符串 win下为;,Linux下为:
    print(os.name) # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    

      d: print(os.environ)       :获取系统环境变量

      e:  os.path.dirname(path) # 返回path的上一级目录,即是os.path.split(path) 的第一个元素

    os.path.dirname(path)  # 返回path的上一级目录,即是os.path.split(path) 的第一个元素
    print(os.path.dirname(r'C:Users26897PycharmProjectsuntitledWorkspaceday27')) 
    #返回path的上一级目录,即是os.path.split(path) 的第一个元素
    

      f:  os.path.split(path) # 将path分割成目录和文件名二元组返回,

    # print(os.path.split(r'C:Users26897PycharmProjectsuntitledWorkspaceday27lianxi.py'))
    # print(os.path.split(r'C:Users26897PycharmProjectsuntitledWorkspaceday27'))
    

      h: os.path.isfile(path) #判断path是不是一个存在的文件,如果是返回ture,否则false

       os.path.isdir(path) #判断path是不是一个存在的目录,如果是返回ture,否则false

    import os
    print(os.path.isfile(r'C:Users26897PycharmProjectsuntitledWorkspaceday27lianxi.py'))  #ture
    print(os.path.isdir(r'C:Users26897PycharmProjectsuntitledWorkspaceday27lianxi.py'))   #false
    print(os.path.isdir(r'C:Users26897PycharmProjectsuntitledWorkspaceday27'))              #ture
    

      g:  os.path.join() #将多个路径组合后返回,(第一个绝对路径之前的参数将被忽略.)

    import os
    ret = os.path.join(r'C:Users26897PycharmProjectsuntitledWorkspaceday27','aaa','bbb')
    print(os.path.abspath(ret))
    # C:Users26897PycharmProjectsuntitledWorkspaceday27aaabb
    

      l: os.path.getsize(path) 返回path的大小

    import os
    print(os.path.getsize(r'C:Users26897PycharmProjectsuntitledWorkspaceday27lianxi.py'))  #428
    print(os.path.getsize(r'C:Users26897PycharmProjectsuntitledWorkspaceday24'))             #4096
    print(os.path.getsize(r'C:Users26897PycharmProjectsuntitledWorkspaceday23'))             #4096
    
    #文件夹都是4096字节,所有的都一样,文件大小精确统计
    

      m : os.path.exist()  : 判断path是否存在  os.path.isabs() : 判断path是不是决定路径,如果是返回ture

      n : os.path.basename(path) : 返回最后一层文件或者目录

    print(os.path.basename('D:/sylar/python_workspace/day25'))                      #day25
    print(os.path.basename('D:/sylar/python_workspace/day25/5.os模块.py'))         #5.os模块.py
    

    4 . 序列化  : 把原本的字典 , 列表等内容转换成字符串的过程.

      a : 为什么要序列化 : 要把内容写入文件    ,      网络传输数据

      b :反序列化 : 字符串 --> 字典,列表 , 数字 , 对象

      c : json 的四个方法 :jumps  loads jump load

        1) json . jumps    jumps.loads

    dic = {'aaa':'bbb','ccc':'ddd'}
    str_dic = json.dumps(dic)
    print(str_dic)             #{"aaa": "bbb", "ccc": "ddd"}     将字典转转换成字符串
    print([str_dic])           #['{"aaa": "bbb", "ccc": "ddd"}']
    注意,json转换完的字符串类型的字典中的字符串是由""表示的
    with open('json_dunp','w')as f:
        f.write(str_dic)
    ret = json.loads(str_dic)    #反序列化: 将一个字符串格式的字典转换成一个字典
    print(ret)                 #{'aaa': 'bbb', 'ccc': 'ddd'}
    注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
    

           2) json. jump,      json. load

    import json
    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)
    

        3)  json 限制问题

          @   json格式的限制1,json格式的key必须是字符串数据类型,如果是数字为key,那么dump之后会强行转成字符串数据类型

    import json
    dic = {1:2,3:4}
    str_dic = json.dumps(dic)
    print(str_dic)            #{"1": 2, "3": 4}
    new_dic = json.loads(str_dic)
    print(new_dic)            #{'1': 2, '3': 4}
    

          @  json是否支持元祖作为key : 不支持

    dic = {(1,2,3):3, ('a','b','c'):4}
    str_dic1 = json.dumps(dic)
    print(str_dic1)                   #keys must be a string
    

          @  json是否支持元祖作为value :支持,会把value转变成列表

    dic = {3:(1,2,3), 4:('a','b','c')}
    str_dic1 = json.dumps(dic)        #{"3": [1, 2, 3], "4": ["a", "b", "c"]}
    print(str_dic1)
    new_dic1 = json.loads(str_dic1)   #{'3': [1, 2, 3], '4': ['a', 'b', 'c']}
    print(new_dic1)
    

          @  对列表的dump

    import json
    li = ['ser',1,'a', (1,2,3)]
    with open('uin','w')as f:
        json.dump(li,f)
    with open('uin', 'r')as f:
        json.load(f)
        print(li, type(li))
    

          @  能不能多次dump数据到文件里,可以多次dump但是不能load出来了

    import json
    dic = {1:2,'a':(1,2,4)}
    lst = ['a', 'b']
    with open('str', 'w')as f :
        json.dump(dic,f)
        json.dump(lst,f)
    with open('str','r')as f:
        json.load(f)             #报错
    

                想dump多个数据进入文件,用dumps

    import json
    dic = {1:2,'a':(1,2,4)}
    lst = ['a', 'b']
    str_dic = json.dumps(dic)
    str_lst = json.dumps(lst)
    with open('iii','w')as f:
        f.write(str_dic + '
    ')
        f.write(str_lst + '
    ')
        f.close()
    with open('iii')as f:
        for line in f:
            ret = json.loads(line)
            print(ret)
    

          @  中文格式 加了ensure_ascii=false中文就可以原样输出

    import json
    dic = {'a':1,'每天':2}
    str_dic = json.dumps(dic, ensure_ascii=False)
    print(str_dic)             #{"a": 1, "u6bcfu5929": 2}
    

          @  json的其他参数,是为了用户看的更方便,但是会相对浪费存储空间(ident缩进, ensure_ascii = false显示中文separators分隔符)

    import json
    data = {'username':['李华','二愣子'],'sex':'male','age':16}
    json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
    print(json_dic2)
    

          @  set不能被dump/dumps

    import json
    set = {2,3,4,'a',9,(2,4,5)}
    str_set = json.dumps(set)
    print(str_set)          #报错Object of type 'set' is not JSON serializable
    

      d : pickle

        dump的结果是bytes, dump用的f文件句柄需要以wb的形式打开,load所用的f是'rb'模式

    import pickle
    dic = {1:2,3:4}
    str_dic = pickle.dumps(dic)
    print(str_dic)               #b'x80x03}qx00(Kx01Kx02Kx03Kx04u.'
    new_dic = pickle.loads(str_dic)
    print(new_dic)               #{1: 2, 3: 4}

        对于对象的序列化需要这个对象对应的类在内存中

    class Student:
        def __init__(self,name, age):
            self.name = name
            self.age = age
    s = Student('lily',34)
    str_S = pickle.dumps(s)
    new_s = pickle.loads(str_S)
    print(new_s)      #<__main__.Student object at 0x000001DE1915D550>
    print(new_s.name) #lily

        对于多次dump/load做了良好的处理.

    import pickle
    with open('pickle_demo','wb') as f:
        pickle.dump({'k1':'v1'}, f)
        pickle.dump({'k11':'v1'}, f)
        pickle.dump({'k11':'v1'}, f)
        pickle.dump({'k12':[1,2,3]}, f)
        pickle.dump(['k1','v1','l1'], f)
    with open('pickle_demo','rb')as f :
        while 1:
            try:
                print(pickle.load(f))
            except EOFError:
                break
    

      e: pickle 和 json 的区别:

        json :    有限制 ,字符串, 字典 , 列表, 数字   支持所有语言

        pickle:   几乎支持所有的对象.

      f : shelve   (稍微了解)只有一个方法

    import shelve
    f = shelve.open('shelve_demo')
    f['key'] = {'k1':(1,2,3),'k2':'v2'}
    f.close()
    f = shelve.open('shelve_demo')
    content = f['key']
    f.close()
    print(content) 
    # shelve  如果你写定了一个文件
    # 改动的比较少
    # 读文件的操作比较多
    # 且你大部分的读取都需要基于某个key获得某个value

      

      

      

  • 相关阅读:
    使用JS对字符串进行MD5加密
    awk 控制语句if-else
    nginx日志切割
    Nginx日志监控工具
    运维小工具
    shell脚本2
    nginx优化方案
    centos7修复grub2
    Centos7的引导顺序
    如何同时运行两个tomcat?
  • 原文地址:https://www.cnblogs.com/gyh412724/p/9445535.html
Copyright © 2011-2022 走看看