Python模块简介

模块#

Copy
整形 浮点型 字符串 列表 字典 集合 元组 布尔值

collection模块#

Copy
# namedtuple:具名元组 from collections import namedtuple # 导入模块方式 point = namedtuple('坐标',['x','y']) # 关键字namedtuple p = point(1,2) print(p) print(p.x) print(p.y) city = namedtuple('日本','name person size') c = city('东京','R老师','L') print(c) print(c.name) print(c.person) print(c.size) # queue:队列 import queue q = queue.Queue() # 生成队列对象 q.put('first') # 往队列塞值 q.put('second') q.put('third') print(q.get()) # 朝队列要值,如果队列取完了,程序会在原地等待,直到队列中拿到值为止 # deque:双端队列(先进先出FIFO first in first out) """ append appendleft pop popleft """ from collections import deque # 导入双端队列 q = deque(['a','b','c']) q.append(1) # 在右侧插入值 q.appendleft(2) # 在左侧插入值 # print(q.pop()) # 1 # print(q.popleft()) # 2 q.insert(0,'哈哈哈') # 直接插队在索引0的位置指定内容 print(q.popleft()) # 哈哈哈 """ 队列不应该支持任意位置插值 只能在首尾插值(不能插队) """ # Counter:计数器 案例:将s中的每个单词作为key出现次数对应value 使用Counter模块实现 from collections import Counter s = 'abcdeabcdabccaba' res = Counter(s) print(res) # ORderedDict:有序字典 normal_d = dict([('a',1),('b',2),('c',3)]) print(normal_d) # {'a': 1, 'b': 2, 'c': 3} from collections import OrderedDict order_d = OrderedDict([('a',1),('b',2),('c',3)]) print(order_d) # OrderedDict([('a', 1), ('b', 2), ('c', 3)]) order_d1 = OrderedDict() order_d1['x'] = 1 order_d1['y'] = 2 order_d1['z'] = 3 for i in order_d1: # x y z 输出结果是有序的 print(i) order_d2 = dict() order_d2['x'] = 1 order_d2['y'] = 2 order_d2['z'] = 3 print(order_d2) for i in order_d2: print(i) # y x z 输出结果是无序的 # defaultdict:带有默认值的字典 案例:列表值大于66那么字典的key为k1,反之字典的key为k2 from collections import defaultdict values = [11,22,33,44,55,66,77,88,99] my_dict = defaultdict(list) # 后续该字典中新建的key对应的value默认就是列表 for i in values: if i > 66: my_dict['k1'].append(i) else: my_dict['k2'].append(i) print(my_dict) # defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]})

时间模块#

Copy
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身 """ 三种表现形式: 1. 时间戳(秒数) 2. 格式化时间(用来展示给人看的) 3. 结构化时间 """ # 1. 时间戳 import time print(time.time()) # 1614324839.1989524 # 2. 格式化时间 import time print(time.strftime('%Y-%m-%d')) # 2021-02-26 # 3. 结构化时间 import time print(time.localtime()) # time.struct_time(tm_year=2021, tm_mon=2, tm_mday=26, tm_hour=15, tm_min=44, tm_sec=44, tm_wday=4, tm_yday=57, tm_isdst=0)
  • 格式转换关系

  • 时间戳转结构化时间
Copy
#时间戳-->结构化时间 #time.gmtime(时间戳) #UTC时间,与英国伦敦当地时间一致 #time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间 >>>time.gmtime(1500000000) time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0) >>>time.localtime(1500000000) time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0) #结构化时间-->时间戳  #time.mktime(结构化时间) >>>time_tuple = time.localtime(1500000000) >>>time.mktime(time_tuple) 1500000000.0
  • 结构化时间转格式化时间
Copy
#结构化时间-->字符串时间 #time.strftime("格式定义","结构化时间") 结构化时间参数若不传,则显示当前时间 >>>time.strftime("%Y-%m-%d %X") '2017-07-24 14:55:36' >>>time.strftime("%Y-%m-%d",time.localtime(1500000000)) '2017-07-14' #字符串时间-->结构化时间 #time.strptime(时间字符串,字符串对应格式) >>>time.strptime("2017-03-16","%Y-%m-%d") time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1) >>>time.strptime("07/24/2017","%m/%d/%Y") time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)

Copy
#结构化时间 --> %a %b %d %H:%M:%S %Y串 #time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串 >>>time.asctime(time.localtime(1500000000)) 'Fri Jul 14 10:40:00 2017' >>>time.asctime() 'Mon Jul 24 15:18:33 2017' #时间戳 --> %a %b %d %H:%M:%S %Y串 #time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串 >>>time.ctime() 'Mon Jul 24 15:19:07 2017' >>>time.ctime(1500000000) 'Fri Jul 14 10:40:00 2017'
Copy
import time true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S')) time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S')) dif_time=time_now-true_time struct_time=time.gmtime(dif_time) print('过去了%d年%d月%d天%d小时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1, struct_time.tm_mday-1,struct_time.tm_hour, struct_time.tm_min,struct_time.tm_sec))

datetime模块#

Copy
import datetime # 自定义日期 res = datetime.date(2019, 7, 15) print(res) # 2019-07-15 # 获取本地时间 # 年月日 now_date = datetime.date.today() print(now_date) # 2019-07-01 # 年月日时分秒 now_time = datetime.datetime.today() print(now_time) # 2019-07-01 17:46:08.214170 # 无论是年月日,还是年月日时分秒对象都可以调用以下方法获取针对性的数据 # 以datetime对象举例 print(now_time.year) # 获取年份2019 print(now_time.month) # 获取月份7 print(now_time.day) # 获取日1 print(now_time.weekday()) # 获取星期(weekday星期是0-6) 0表示周一 print(now_time.isoweekday()) # 获取星期(weekday星期是1-7) 1表示周一 # timedelta对象 # 可以对时间进行运算操作 import datetime # 获得本地日期 年月日 tday = datetime.date.today() # 定义操作时间 day=7 也就是可以对另一个时间对象加7天或者减少7点 tdelta = datetime.timedelta(days=7) # 打印今天的日期 print('今天的日期:{}'.format(tday)) # 2019-07-01 # 打印七天后的日期 print('从今天向后推7天:{}'.format(tday + tdelta)) # 2019-07-08 # 总结:日期对象与timedelta之间的关系 """ 日期对象 = 日期对象 +/- timedelta对象 timedelta对象 = 日期对象 +/- 日期对象 验证: """ # 定义日期对象 now_date1 = datetime.date.today() # 定义timedelta对象 lta = datetime.timedelta(days=6) now_date2 = now_date1 + lta # 日期对象 = 日期对象 +/- timedelta对象 print(type(now_date2)) # <class 'datetime.date'> lta2 = now_date1 - now_date2 # timedelta对象 = 日期对象 +/- 日期对象 print(type(lta2)) # <class 'datetime.timedelta'> # 小练习 计算举例今年过生日还有多少天 birthday = datetime.date(2019, 12, 21) now_date = datetime.date.today() days = birthday - now_date print('生日:{}'.format(birthday)) print('今天的日期:{}'.format(tday)) print('距离生日还有{}天'.format(days)) # 总结年月日时分秒及时区问题 import datetime dt_today = datetime.datetime.today() dt_now = datetime.datetime.now() dt_utcnow = datetime.datetime.utcnow() # UTC时间与我们的北京时间cha ju print(dt_today) print(dt_now) print(dt_utcnow)

生成随机验证码#

Copy
# 生成随机验证码 """ 验证码构成: 大写字母 小写字母 数字 要求: 生成5位数的随机验证码 chr random.choice 思路: 1. 先取出随机大写字母 小写字母 数字 2. for循环五次 在for循环上方定义空字符串名 3. 将int类型转换为str类型 进而实现后续五个字符拼接 4. 定义函数,用户随机取出任意位数验证码 ps: A-Z 65-90 z-z 97-122 """ def get_code(n): code = '' for i in range(n): # 先生成随机的大写字母 小写字母或者数字 upper_str = chr(random.randint(65,90)) # 无法直接找到大写字母,所以先找到ASCII表对应的数字,用chr将对应数字转换为大写,再通过随机模块,取出对应的大写英文 lower_str = chr(random.randint(97,122)) # 通过ASCII取出对应随机小写字母 random_int = str(random.randint(0,9)) # 随机取出数字0-9中任意数字并将int转为str # 从上面三个中随机选择一个作为随机验证码的某一位 code += random.choice([upper_str,lower_str,random_int]) # code在for循环上原本是空,每循环一次字符串拼接一位,随之产生五位数的验证码 return code res = get_code(5) print(res) # ps: 验证码忽略大小写的内部原理: 后端代码统一转换成大写或者小写进行比对

os模块#

Copy
""" os模块是和操作系统打交道的模块 sys模块是和python解释器打交道的模块 """ # 案例:将目录下的文件列出给用户选择,根据用户选择打开对应文件 import os BASE_DIR = os.path.dirname(__file__) # 获取执行文件所在目录的路径 MOVIE_DIR = os.path.join(BASE_DIR,'老师们的作品') # 在当前路径的上一级路径中找到目录 movie_list = os.listdir(MOVIE_DIR) # 列出路径下的文件 while True: for i,j in enumerate(movie_list,1): print(i,j) # 输出老师们的作品有哪些 choice = input('你想看谁的啊(今日热搜:tank老师)>>').strip() # 让用户选择 if choice.isdigit(): # 判断用户选择的是否是一个数字 choice = int(choice) # 用户选择的只是一个字符类型的整形,需要转为整形 if choice in range(1,len(movie_list)+1): # 判断是在列表顾头不顾尾,所以需要加1 # 获取用户想看的文件名 target_file = movie_list[choice-1] # movie_list是从1开始 需要减1 # 拼接文件绝对路径 target_path = os.path.join(MOVIE_DIR,target_file) with open(target_path,'r',encoding='utf-8') as f: print(f.read()) os.mkdir('tank老师精选') # 自动创建文件夹 print(os.path.exists(r'F:\py_learn\老师们的作品')) # 判断文件或者文件夹是否存在 print(os.path.isfile(r'F:\py_learn\老师们的作品\明老师.txt')) # 判断文件是否存在,不支持判断文件夹 os.rmdir(r'F:\py_learn\老师们的作品') # 只能删除空文件夹,文件夹不为空则无法删除 print(os.getcwd()) # 获取当前所在路径 print(os.chdir(r'F:\py_learn\老师们的作品')) # 切换路径 print(os.getcwd()) # 再次获取路径,已经改变为切换的路径 # 获取文件大小 print(os.path.getsize(r'F:\py_learn\老师们的作品\明老师.txt')) # 获取字节大小 with open(r'F:\py_learn\老师们的作品\明老师.txt',encoding='utf-8') as f: # 获取字符个数 print(len(f.read()))

sys模块#

Copy
# 和python解释器打交道 import sys sys.path.append() # 将某个路径添加至环境变量中 print(sys.version) # 打印python解释器版本 print(sys.argv) # ['F:/py_learn/re模块.py'] username = sys.argv[1] # 类似于shell中的$1传参 这里获取第一个参数 password = sys.argv[2] # 获取执行py文件的第二个参数 if username == 'jason' and password == '123': print('欢迎使用')

序列化模块#

Copy
""" # 序列化 序列:字符串 序列化:其他数据类型转换成字符串的过程 写入文件的数据必须是字符串或者是二进制,因为只有字符串才能转换成二进制,所以写入文件的内容必须是字符串 基于网络传输的数据必须是二进制 序列化:其他数据类型转换成字符串的过程 反序列化:字符串转换成其他数据类型的过程 # 序列化模块: json模块: 所有的语言都支持json格式 支持的数据类型很少 支持的数据类型:字符串 列表 字典 数字 元组(转成列表) 布尔值 pickle模块: 只支持python语言 python所有的数据类型都支持 """ """ json模块指南: dumps:序列化 将其他类型的数据类型转换为字符串 loads:反序列化 将字符串转换为其他类型 dump:dump方法接收一个文件句柄,直接将其他类型换成json字符串写入文件 load:load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 # 使用记忆方式: dumps和loads是直接对数据结构进行处理 dump和load是对文本进行处理 """ # 序列化与反序列化: import json d = {'name':'jason'} res = json.dumps(d) # 将字典转换为json格式,json格式的字符串 必须是双引号,外部单引号,内部双引号 print(res,type(res)) # {"name": "jason"} <class 'str'> res1 = json.loads(res) # 将json格式转换为字典 print(res1,type(res1)) # {'name': 'jason'} <class 'dict'> # 案例一:将字典存储到文本中,并且转换为字符串格式,然后又将文本中字符串格式内容取出,转为字典 d = {'name':'jason'} with open('userinfo','w',encoding='utf-8') as f: json.dump(d,f) # 先转成字符串并启动写入文件,结果:userinfo文件中增加内容{'name':'jason'}(字符串格式形式存储) with open('userinfo','r',encoding='utf-8') as f: res = json.load(f) print(res,type(res)) # 将字符串从文本中取出,并恢复原本的数据类型 # 案例二:将多行字典存储到文本中,并实现格式转换(注意:字典存储在文本中必须一行一个字典,否则无法取出) with open('userinfo','w',encoding='utf-8') as f: # 将多个字典存储到同一个文本中,并且通过json.dumps转换为字符串 res = json.dumps(d) res1 = json.dumps(d) f.write('%s\n'%res) f.write('%s\n'%res1) with open('userinfo','r',encoding='utf-8') as f: # 将文本中的字符串转换为字典 for i in f: res = json.loads(i) print(res,type(res)) # {'name': 'jason'} <class 'dict'> # 注意: t = (1,2,3,4) res = json.dumps(t) print(res,type(res)) # [1, 2, 3, 4] <class 'str'> 元组转字符串会转换为列表形式 a = {'name':'葬爱汤哥'} print(json.dumps(a)) # {"name": "\u846c\u7231\u6c64\u54e5"} 中文会进行转码 print(json.dumps(a,ensure_ascii=False)) # {"name": "葬爱汤哥"}这样就不会进行转码 """ 用pickle操作文件的时候 文件的打开模式必须是b模式 """ import pickle d = {'name':'jason'} res = pickle.dumps(d) # 将对象转换为二进制 print(res,type(res)) # b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x05\x00\x00\x00jasonq\x02s.' <class 'bytes'> res1 = pickle.loads(res) # 将二进制转换为字典 print(res1,type(res1)) # {'name': 'jason'} <class 'dict'> with open('userinfo','wb') as f: # 因为pickle模块存储会转换为二进制格式,所以写入方式为wb pickle.dump(d,f) # 同样直接操作文件需要用dump而不是dumps with open('userinfo','rb') as f: res = pickle.load(f) print(res,type(res)) # {'name': 'jason'} <class 'dict'>

subprocess模块#

Copy
""" sub: 子 process: 进程 """ import subprocess obj = subprocess.Popen('xxxxx',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) print('stdout',obj.stdout.read().decode('gbk')) # 打印正确输出结果 print('stderr',obj.stderr.read().decode('gbk')) # 打印错误输出结果 # 模拟cmd界面,循环输入指令 while True: cmd = input('cmd>>>:').strip() import subprocess obj = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) print('正确命令返回结果stdout',obj.stdout.read().decode('gbk')) print('错误命令返回结果stderr',obj.stderr.read().decode('gbk'))
posted @   元气少女郭德纲!!  阅读(121)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
CONTENTS