zoukankan      html  css  js  c++  java
  • 常用模块(random,os,json,pickle,shelve)

    常用模块(random,os,json,pickle,shelve)

    random

    import random
    print(random.random())  # 0-1之间的小数
    print(random.uniform(10,12))  # n,m之间的小数

    生成随机整数

    print(random.randint(1,100))  # 必须是两个参数,规定一个范围[1,100]
    print(random.randrange(100))  # 支持一个参数的情况
    print(random.randrange(90,100))  # 两个参数[90,100)
    print(random.randrange(90,100,2))  # 三个参数,最后一个是步长

    从一个序列中随机选择:一个用choice,多个用sample

    print(random.choice([1,'23',[4,5]]))  # 1或者23或者[4,5]
    print(random.sample([1,'23',[4,5]],2))  # 指定随机选多个

    打乱序列顺序 (洗牌,抽奖,测试一些排序算法

    item = [1,3,5,7,9]
    random.shuffle(item)  # 改变了原列表
    print(item)  # [5, 7, 3, 9, 1] 随机打乱

    生成验证码

    复制代码
    # 生成一个6位数字随机验证码
    s = random.randrange(100000,1000000)
    print(s)
    
    l = []
    for i in range(6):
        l.append(str(random.randint(0,9)))
    print(''.join(l))
    
    # 生成一个6位数字随机验证码,不能有重复
    print(random.sample(range(0,10),6))  # [7, 1, 5, 8, 9, 0]
    
    # 生成一个6位数字+字母的验证码
    # 0-9
    # a-z
    # 几个数字几个字母
    l = []
    for i in range(6):
        alpha = chr(random.randint(65, 90))  # random.randrange(65,91)
        alpha_lower = chr(random.randint(97, 122))
        num = str(random.randint(0, 9))
        ret = random.choice([alpha,num,alpha_lower])
        l.append(ret)
    print(''.join(l))
    复制代码

    os模块

     os模块是与操作系统交互的一个接口

    复制代码
    '''
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    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.popen("bash command)  运行shell命令,获取执行结果
    os.environ  获取系统环境变量
    
    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的大小
    '''
    复制代码

    和系统路径有关的

    print(os.getcwd())  # 获取当前工作目录 C:UsersAdministratorPycharmProjectsyangxtday21
    os.chdir(r'C:Users')  # 改变当前脚本工作目录
    print(os.curdir)  # 返回'.'
    print(os.pardir)  # 返回'..'

    和系统文件夹和文件相关的

    复制代码
    os.mkdir('dir1')
    os.makedirs('dir3\dir4')
    os.rmdir('dir3\dir4')
    os.removedirs('dir3\dir4')
    os.remove('文件路径')
    os.rename('文件路径')
    print(os.listdir(r'C:UsersAdministratorPycharmProjectsyangxt'))
    复制代码

    和操作系统特征相关的

    os.stat('path/filename')
    print(os.sep)  # windows下为 linux 为/  拼目录
    print(os.environ)  # 获取系统的环境变量

    和操作系统的命令相关

    # 自动化运维很重要
    os.system('dir')  # 没有返回值,且直接执行代码,把结果直接输出
    ret = os.popen('dir')  # 如果有结果就将结果返回回来
    print(ret.read())  # ret.read()获取结果

    os.path系列

    ret = os.path.split(r'C:UsersAdministratorPycharmProjectsyangxtday21常用模块.py')
    print(ret)  # ('C:\Users\Administrator\PycharmProjects\yangxt\day21', '常用模块.py')
    ret = os.path.join(r'C:UsersAdministratorPycharmProjectsyangxt',r'day21')
    print(ret)  # C:UsersAdministratorPycharmProjectsyangxtday21

    序列化模块

    什么叫做序列化
    字典和列表 不能写到文件里
    序列化方法
    格式转化
    把python中的数据转换成str —— 序列化
    可以把str转换成python的数据 —— 反序列化

    json

    所有的语言都通用,它能序列化的数据是有限的:字典列表元组
    序列化中的内容只能包含:字典 列表 数字 字符串,如果是元组——自动转成列表的样子

    复制代码
    import json
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    str_dic = json.dumps(dic)  # 序列化:将一个字典转换成一个字符串
    print(type(str_dic),str_dic)  # <class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
    # 注意,json转换完的字符串类型的字典中的字符串是由""表示的
    
    dic2 = json.loads(str_dic)  # 反序列化:将一个字符串格式的字典转换成一个字典
    # 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
    print(type(dic2),dic2)  # <class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
    
    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)
    复制代码

    pickle

    pickle —— 序列化任何数据类型,python专有的,不能和其他语言兼容,结果是bytes
    用pickle序列化的数据,反序列化也必须用pickle

    复制代码
    import pickle
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    str_dic = pickle.dumps(dic)
    print(str_dic)  #一串二进制内容
    
    dic2 = pickle.loads(str_dic)
    print(dic2)    #字典
    
    import time
    struct_time  = time.localtime(1000000000)
    print(struct_time)
    f = open('pickle_file','wb')
    pickle.dump(struct_time,f)
    f.close()
    
    f = open('pickle_file','rb')
    struct_time2 = pickle.load(f)
    print(struct_time2.tm_year)
    复制代码

    shelve

    shelve 只提供一个open,shelve.open('文件名')拿到一个文件句柄,这个文件句柄就可以当作字典操作

    复制代码
    import shelve
    f = shelve.open('shelve_file')
    f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接对文件句柄操作,就可以存入数据
    f.close()
    
    import shelve
    f1 = shelve.open('shelve_file')
    existing = f1['key']  #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
    f1.close()
    print(existing)
    复制代码

    不支持多个人同时写,支持多个人同时读,如果只是读,就设置flag='r'
    这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只进行读操作
    我们可以让shelve通过只读方式打开DB

    import shelve
    f = shelve.open('shelve_file', flag='r')
    existing = f['key']
    f.close()
    print(existing)

    正常情况下shelve打开的文件句柄感知不到值的修改,设置writeback=True就可以保存修改内容了

    import shelve
    f2 = shelve.open('shelve_file', writeback=True)
    print(f2['key'])
    f2['key']['new_value'] = 'this was not here before'
    f2.close()

    总结

    json:所有语言通用,能转换的数据类型有限 *****
    pickle:只限于python语言,能转换所有的数据类型 做游戏的时候
    shelve:只限于python语言,能转换所有的数据类型,使用方法类似字典

  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/QQ279366/p/7839997.html
Copyright © 2011-2022 走看看