[toc]
接上篇python内置模块,续写下面的模块
random模块的方法如下:
方法使用示例:
import random # 随机生成一个0-1之间的随机数 num = random.random() print(num) # >>>0.9158120687169333
import random # 随机生成一个范围内的随机数 num = random.randint(0,10) print(num) # >>>3
import random # 随机生成一个范围内的小数 num = random.uniform(0,5) print(num) # >>>2.3192301761260783
import random # 随机抽取一个元素:抽奖示例 num = random.choice(['特等奖','一等奖','二等奖','三等奖','参与奖','谢谢惠顾']) print(num) # >>>特等奖
import random # 随机抽取定量样本,一次性抽取两个 num = random.sample(['河北省','河南省','山东省','山西省','北京市','上海市'],2) print(num) # >>>['山西省', '北京市']
import random # 打乱容器内的元素,洗牌示例 lst_card = [2,3,4,5,6,7,8,9,10,'A','J','Q','k',] random.shuffle(lst_card) # 打乱顺序,洗牌 print(lst_card) # >>>[3, 'Q', 9, 4, 7, 2, 'A', 6, 'J', 10, 5, 8, 'k']
''' 搜狗公司笔试题 随机验证码可以是由 数字 小写字母 大小写字母 任意组合 编写能够产生五位数的随机验证码 ps:五位 每位都可以是三种情况之一 ''' # 验证码的随机性,使用random import random for i in range(5): code_num = random.randint(0, 9) # 获取0-9内的随机数 code_lower = chr(random.randint(97, 122)) # 获取a-z的字符,数字转换为ASCII code_upper = chr(random.randint(65, 90)) # 获取A-Z的字符,数字转换为ASCII # 随机抓取任意一个 get_code = random.choice([code_num,code_lower,code_upper]) print(get_code,end='')
升级版本
import random # 定义一个可以获取任意长度的验证码函数 def get_anylen_code(n): code = '' for i in range(n): code_num = str(random.randint(0, 9)) # 获取0-9内的随机数 code_lower = chr(random.randint(97, 122)) # 获取a-z的字符,数字转换为ASCII code_upper = chr(random.randint(65, 90)) # 获取A-Z的字符,数字转换为ASCII # 随机抓取任意一个 get_code = random.choice([code_num,code_lower,code_upper]) # print(get_code,end='') code+=get_code return code # 获取10位验证码 print(get_anylen_code(10)) # >>>0AP9xSUmFY # 获取6位验证码 print(get_anylen_code(6)) # >>>2q6de0 # 获取4位验证码 print(get_anylen_code(4)) # >>>k3Y1
该模块经常和操作系统”打交道“,os模块的搭配使用方法如下:
方法使用示例:
创建单层目录
import os # 创建单层目录 os.mkdir(r'HammerZe') # 创建多层目录报错 os.mkdir(r'HammerZe\Ze')
创建多层目录
import os # 创建多层目录 os.makedirs(r'HammerZe\Ze')
该方法只能删除单级空目录
import os # 删除单层目录 os.rmdir(r'E:\Old_BoyClass_fourth\Ze') '''Ze文件是我提前创建好的'''
该方法虽然能写多层路径,但是也只能删除空目录
import os # 删除单层目录 os.removedirs(r'E:\Old_BoyClass_fourth\HammerZe')
获取当前文件路径,可以嵌套使用返回上一层路径
import os # 获取当前文件所在路径 print(os.path.dirname(__file__)) # >>>E:/Old_BoyClass_fourth # 嵌套使用,获取上一层路径 print(os.path.dirname(os.path.dirname(__file__))) # >>>E:/
路径拼接
import os # 路径拼接 # 获取当前文件路径 now_dir = os.path.dirname(__file__) print(now_dir) #E:/Old_BoyClass_fourth/join # 路径拼接,找到test.py文件 join_dir = os.path.join(now_dir,'test.py') print(join_dir) # E:/Old_BoyClass_fourth/join\test.py
列出指定目录下的文件名称,文件名以列表的形式组织返回
import os # 显示指定路径下的文件名称 find_dir = os.listdir(r'E:\Old_BoyClass_fourth\Mv') print(find_dir) '''a,b,c文件我自己建的''' # ['a.txt', 'b.txt', 'c.txt']
import os # 进阶练习:获取指定目录的文件,选择文件可以进入 # 获取当前文件路径 now_dir = os.path.dirname(__file__) # >>> E:/Old_BoyClass_fourth # 拼接第一层 one_join = os.path.join(now_dir,r'E:\Old_BoyClass_fourth\Mv') # >>E:\Old_BoyClass_fourth\Mv # 获取指定目录下的文件 dir_list= os.listdir(r'E:\Old_BoyClass_fourth\Mv') # ['a.txt', 'b.txt', 'c.txt'] # 通过枚举的形式使得文件名由索引值 for index,values in enumerate(dir_list,1): print(index,values) # 获取想要查看的文件序号 select_num = input('please input your select number>>>:').strip() if select_num.isdigit(): select_num = int(select_num) # 获取文件的索引不能超过文件的个数 if select_num in range(len(dir_list)+1): # 索引获取对应的文件名称 file_name = dir_list[select_num-1] # 拼接文件路径,获取a,b,c文件的精确位置 dir_join = os.path.join(one_join,file_name) # 读取文件 with open(dir_join,'r',encoding='utf8') as read_f: print(read_f.read())
删除一个文件
import os os.remove(r'E:\Old_BoyClass_fourth\Mv\drop.py')
修改文件名
import os os.rename('Mv','findtxt')
获取当前工作路径
import os # 获取当前工作路径 print(os.getcwd()) # E:\Old_BoyClass_fourth
切换路径
import os # 获取当前工作路径 print(os.getcwd()) # E:\Old_BoyClass_fourth os.chdir('D:') print(os.getcwd()) # D:\
判断当前路径是否存在
import os # 存在的情况输出True print(os.path.exists(r'E:\Old_BoyClass_fourth\findtxt\a.txt')) print(os.path.exists(r'E:\Old_BoyClass_fourth\findtxt\b.txt')) # True # True # 不存在的情况输出False print(os.path.exists(r'E:\Old_BoyClass_fourth\findtxt\z.txt')) # >>>False
判断是否为文件
import os # E:\Old_BoyClass_fourth\findtxt\a.txt' print(os.path.isfile(r'E:\Old_BoyClass_fourth\findtxt\a.txt')) print(os.path.isfile(r'E:\Old_BoyClass_fourth\findtxt')) # True # False
判断是否为文件夹
import os # E:\Old_BoyClass_fourth\findtxt\a.txt' print(os.path.isdir(r'E:\Old_BoyClass_fourth\findtxt\a.txt')) print(os.path.isdir(r'E:\Old_BoyClass_fourth\findtxt')) # False # True
获取文件内容的大小,以字节数输出
import os print(os.path.getsize(r'E:\Old_BoyClass_fourth\findtxt\a.txt')) # a文本内容:a文件 # 结果>>>7,a为一个字节,文件为六个字节
import sys print(sys.path) print(sys.version) # 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] print(sys.platform) # win32
sys.path在自定义模块中讲过~
arg不跟[ ]返回的是文件的绝对路径
import sys print(sys.argv) # >>>['E:/Old_BoyClass_fourth/test.py']
arg跟[]就是从外部获取参数,来返回一个列表,打开cmd运行py文件演示:
import sys print(sys.argv) # >>>['E:/Old_BoyClass_fourth/test.py'] index_v = sys.argv[1] print(index_v)
添加一个argv[2]:
import sys print(sys.argv) # >>>['E:/Old_BoyClass_fourth/test.py'] index_v = sys.argv[1] index_v2 = sys.argv[2] print(index_v,index_v2)
动态演示:
import sys index_v = sys.argv[1] index_v2 = sys.argv[2:] print(index_v,index_v2)
在不同的编程语言中怎么可以无障碍传输,中间这个“翻译官”谁来做,比如在python中的列表,到js中就变成了数组,这时候,json模块就可以做“翻译官”,json模块的主要作用是用来跨语言传输
Supports the following objects and types by default: +-------------------+---------------+ | Python | JSON | +===================+===============+ | dict | object | +-------------------+---------------+ | list, tuple | array | +-------------------+---------------+ | str | string | +-------------------+---------------+ | int, float | number | +-------------------+---------------+ | True | true | +-------------------+---------------+ | False | false | +-------------------+---------------+ | None | null | +-------------------+---------------+
import json dic = {'username': 'HammerZe', 'pwd': 123} str_json = json.dumps(dic) print(str_json) # 序列化结果:{"username": "HammerZe", "pwd": 123} dic_json = json.loads(str_json) print(dic_json) # 反序列化:{'username': 'HammerZe', 'pwd': 123} # 文件存储 with open(r'E:\Old_BoyClass_fourth\findtxt\a.txt','w',encoding='utf8') as w_f: str_json = json.dumps(dic) w_f.write(str_json) with open(r'E:\Old_BoyClass_fourth\findtxt\a.txt','r',encoding='utf8') as r_f: res = r_f.read() print(json.loads(res)) # 结果 {"username": "HammerZe", "pwd": 123} {'username': 'HammerZe', 'pwd': 123} {'username': 'HammerZe', 'pwd': 123}
这两个方法是对dumps和loads的简写,实现将字典序列化写入文件和反序列化取出
import json dic = {'username': 'HammerZe', 'pwd': 123} # 文件存储 with open(r'E:\Old_BoyClass_fourth\findtxt\a.txt','w',encoding='utf8') as w_f: seq_str = json.dump(dic,w_f) with open(r'E:\Old_BoyClass_fourth\findtxt\a.txt','r',encoding='utf8') as r_f: nonseq_str = json.load(r_f) print(nonseq_str) # 结果 # {'username': 'HammerZe', 'pwd': 123}
此模块可以基于网络连接上一台计算机,让连接上的计算机执行我们需要执行的命令,最后将命令结果返回
import subprocess # 当前系统中正在运行的进程 res = subprocess.Popen('tasklist', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) print('stdout',res.stdout.read().decode('gbk')) # 获取正确命令执行之后的结果 print('stderr',res.stderr.read().decode('gbk')) '''windows电脑内部编码默认为GBK'''