python中常用的内置模块
Posted 非晚非晚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中常用的内置模块相关的知识,希望对你有一定的参考价值。
文章目录
1. time模块
(1)功能汇总
在Python中,通常有这3种方式来表示时间:
时间戳(timestamp)
:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
.我们运行“type(time.time())”,返回的是float类型。通常用于时间间隔的计算
。
格式化的时间字符串
(Format String)(按照某种格式显示的)例如‘1999-12-06’。通常用于格式化显示时间
。
符号 说明 %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 当前时区的名称 %% %号本身
结构化时间(struct_time)
:struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
索引(Index) 属性(Attribute) 值(Values) 0 tm_year(年) 比如2011 1 tm_mon(月) 1 - 12 2 tm_mday(日) 1 - 31 3 tm_hour(时) 0 - 23 4 tm_min(分) 0 - 59 5 tm_sec(秒) 0 - 60 6 tm_wday(weekday) 0 - 6(0表示周一) 7 tm_yday(一年中的第几天) 1 - 366 8 tm_isdst(是否是夏令时) 默认为0
(2)程序解释
- 3种类型的时间举例
import time
print('--------------时间戳-------------')
time1 = time.time() #时间戳,float类型
time2 = time.time()
diff_time = time2 - time1
print('时间间隔:{0} s'.format(diff_time))
print('--------------时间字符串-------------')
str1 = time.strftime("%Y-%m-%d %X")
print(str1)
print('--------------结构化时间(struct_time) -------------')
loc_time_1 = time.localtime()#本地时区的struct_time
loc_time_2 = time.gmtime() #UTC时区的struct_time
print(loc_time_1)
print(loc_time_2)
输出:
--------------时间戳-------------
时间间隔:4.76837158203125e-07 s
--------------时间字符串-------------
2021-11-13 22:29:37
--------------结构化时间(struct_time) -------------
time.struct_time(tm_year=2021, tm_mon=11, tm_mday=13, tm_hour=22, tm_min=29, tm_sec=37, tm_wday=5, tm_yday=317, tm_isdst=0)
time.struct_time(tm_year=2021, tm_mon=11, tm_mday=13, tm_hour=14, tm_min=29, tm_sec=37, tm_wday=5, tm_yday=317, tm_isdst=0)
- 3种类型的时间转换
import time
print('--------------时间戳《==》时间字符串-------------')
t = time.time()
st = time.localtime(t) #时间戳 ---> 结构化时间
ft = time.strftime('%Y/%m/%d %H:%M:%S',st) # 结构化时间 ---> 格式化时间
print(st)
print(ft)
print('--------------结构化时间(struct_time)《==》时间字符串 -------------')
st = time.strftime('%Y/%m/%d %H:%M:%S')
ft = time.strptime(st,'%Y/%m/%d %H:%M:%S') # 时间字符串 ---> 格式化时间
st= time.strftime('%Y/%m/%d %H:%M:%S',ft) # 格式化时间 ---> 时间字符串
print(st)
print(ft)
输出:
--------------时间戳《==》时间字符串-------------
time.struct_time(tm_year=2021, tm_mon=11, tm_mday=13, tm_hour=22, tm_min=45, tm_sec=50, tm_wday=5, tm_yday=317, tm_isdst=0)
2021/11/13 22:45:50
--------------结构化时间(struct_time)《==》时间字符串 -------------
2021/11/13 22:45:50
time.struct_time(tm_year=2021, tm_mon=11, tm_mday=13, tm_hour=22, tm_min=45, tm_sec=50, tm_wday=5, tm_yday=317, tm_isdst=-1)
import time
print('--------------时间戳》》时间字符串-------------')
#time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串
time1 = time.time() #时间戳,float类型
str_time = time.ctime(time1)
print(str_time)
print('--------------结构化时间(struct_time)》》时间字符串 -------------')
#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
loc_time = time.localtime()#本地时区的struct_time
print(time.asctime(loc_time))
输出:
--------------时间戳》》时间字符串-------------
Sat Nov 13 22:36:19 2021
--------------结构化时间(struct_time)》》时间字符串 -------------
Sat Nov 13 22:36:19 2021
2. datetime模块
(1)功能汇总
datetime模块中包含如下类:
类名 | 功能说明 |
---|---|
date | 日期对象,常用的属性有year, month, day |
time | 时间对象 |
datetime | 日期时间对象,常用的属性有hour, minute, second, microsecond |
datetime_CAPI | 日期时间对象C语言接口 |
timedelta | 时间间隔,即两个时间点之间的长度 |
tzinfo | 时区信息对象 |
datetime模块中包含的常量:
常量 | 功能说明 | 用法 | 返回值 |
---|---|---|---|
MAXYEAR | 返回能表示的最大年份 | datetime.MAXYEAR | 9999 |
MINYEAR | 返回能表示的最小年份 | datetime.MINYEAR | 1 |
(2)程序解释
import datetime
now_time = datetime.datetime.now() # 现在的时间
# 只能调整的字段:weeks days hours minutes seconds
print(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三周后
print(datetime.datetime.now() + datetime.timedelta(weeks=-3)) # 三周前
print(datetime.datetime.now() + datetime.timedelta(days=-3)) # 三天前
print(datetime.datetime.now() + datetime.timedelta(days=3)) # 三天后
print(datetime.datetime.now() + datetime.timedelta(hours=5)) # 5小时后
print(datetime.datetime.now() + datetime.timedelta(hours=-5)) # 5小时前
print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分钟前
print(datetime.datetime.now() + datetime.timedelta(minutes=15)) # 15分钟后
print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前
print(datetime.datetime.now() + datetime.timedelta(seconds=70)) # 70秒后
current_time = datetime.datetime.now()
# 可直接调整到指定的 年 月 日 时 分 秒 等
print(current_time.replace(year=1977)) # 直接调整到1977年
print(current_time.replace(month=1)) # 直接调整到1月份
print(current_time.replace(year=1989,month=4,day=25)) # 1989-04-25 18:49:05.898601
# 将时间戳转化成时间
print(datetime.date.fromtimestamp(1232132131)) # 2009-01-17
print(datetime.date.today()) #2021-11-13
3. calendar模块
(1)功能汇总
calendar.calendar(year,w=2,l=1,c=6,m=3)
,返回一个字符串格式的年历。
- year接收一个年份数字,可以是过去现在或未来,比如我这里打印的是1千年以后的3019年。
- w表示个位天数相邻两天之间的间隔宽度(字符空格数),默认是2.
- l表示每一个周占用的行数,默认是1。
- c表示并排的两个月之间的间隔宽度,默认是6。但是c不小于w。即当c值小于w时,c等于w。
- m表示并排展示多少个月。默认是3,显示一排3个月,会显示4排。
calendar.prcal(year,w=2,l=1,c=6, m=3)
也是打印一年的年历,相当于print(calendar.calendar(year,w,l,c))。calendar.month(2019, 10, w=0, l=0)
,打印某一个月的日历。calendar.timegm(tupletime)
接受一个时间元组,返回时间戳,时间元组的值依次表示年、月、日、时、分、秒。calendar.weekday(year,month,day)
返回传入的日期是星期几。calendar.isleap(year)
返回传入的年是不是闰年,是返回True,否则为false。如2020年是闰年。calendar.leapdays(start, end)
返回start,end之间有多少个闰年,左闭右开区间。
(2)程序解释
import calendar
print("month: \\n", calendar.month(2019, 10, w=0, l=0))
#print("month: \\n", calendar.prmonth(2019, 10, w=0, l=0))
print("monthcalendar: ", calendar.monthcalendar(2019, 11))#2019年11月的日历
print("monthrange: ", calendar.monthrange(2019, 10))#2019年11月日历的范围
输出:
month:
October 2019
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
monthcalendar: [[0, 0, 0, 0, 1, 2, 3], [4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23, 24], [25, 26, 27, 28, 29, 30, 0]]
monthrange: (1, 31)
4. sys模块
Python的sys模块提供访问由解释器使用或维护的变量的接口
,并提供了一些函数用来和解释器进行交互,操控Python的运行时环境。
(1)功能汇总
方法 | 说明 |
---|---|
sys.argv | 传递给程序的命令行参数列表 |
sys.path | 模块的搜索路径;sys.path[0] 表示当前脚本所在目录 |
sys.exit(n) | 通过引发SystemExit异常来退出当前程序。n为0表示正常,非零表示异常。 |
sys.modules | 已加载的模块的字典 |
sys.exc_info() | 获取正在处理的异常的相关信息 |
sys.builtin_module_names | 当前解释器所有内置模块的名称 |
sys.copyright | 包含解释器版权相关信息的字符串 |
sys.exec_prefix | 用于查找特定于当前机器的python库的路径前缀 |
sys.executable | Python解释器可执行文件的绝对路径 |
sys.float_info | 包含有关浮点数实现的信息的结构序列 |
sys.float_repr_style | 表示浮点数的repr()方法的输出样式的字符串 |
sys.hash_info | 包含哈希算法相关信息的结构序列 |
sys.hexversion | 对sys.version_info中包含的版本信息进行编码后使用十六进制表示的整数 |
sys.implementation | 包含有关Python实现的相关信息 |
sys.int_info | 包含有关整形实现的信息的结构序列 |
sys.maxsize | 返回字符串、列表、字典和其他内置类型的最大长度 |
sys.maxunicode | 返回能够表示的最大Unicode码点的整数值 |
sys.platform | 返回平台标识符字符串 |
sys.prefix | 返回安装平台无关Python文件的目录 |
sys.thread_info | 包含有关线程实现的信息的结构序列 |
sys.version | 表示当前解释器版本的字符串 |
sys.version_info | 当前解释器版本的命名元组 |
sys.byteorder | 本机的字节排序方式,little表示小尾,big表示大尾 |
sys.api_version | 返回表示Python解释器的C语言版本API的整数 |
sys.getsizeof() | 获取对象占用的内存大小(用字节表示 ) |
(2)程序解释
- sys.argv
传递给程序的命令行参数列表,其中argv[0]是传入的脚本名字,其它为传入的参数名字,且为str类型。
import sys
# filename:sys_test.py
for i in range(len(sys.argv)):
print('argv{0}: type is {1}, value is {2}'.format(i, type(sys.argv[i]), sys.argv[i]))
然后执行代码python argv_test.py 1 a 2 b
。运行结果如下:
argv0: type is <class 'str'>, value is sys_test.py
argv1: type is <class 'str'>, value is 1
argv2: type is <class 'str'>, value is a
argv3: type is <class 'str'>, value is 2
argv4: type is <class 'str'>, value is b
- sys.path
表示模块的搜索路径
,其中sys.path[0]表示脚本当前目录
。
import sys
print(sys.path[0])
输出:
/home/xxx/workspace/python/python_tutorials
- sys.getsizeof()
获取对象占用的内存大小(用字节表示)
import sys
for obj in [int(), float(), list(), tuple(), set(), dict(), object]:
print(str(obj.__class__).ljust(20), sys.getsizeof(obj))
输出:
<class 'int'> 24
<class 'float'> 24
<class 'list'> 56
<class 'tuple'> 40
<class 'set'> 216
<class 'dict'> 232
<class 'type'> 408
5. os模块
os模块是与操作系统交互的一个接口。
(1)功能汇总
方法 | 说明 |
---|---|
os.getcwd() | 获取当前工作目录,Current working directory |
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下为"\\t\\n",Linux下为"\\n" |
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.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的大小 |
(2)程序解释
- 进入空间操作
import os
print(os.getcwd()) #当前工作目录
os.chdir('..') #返回上一层目录
print(os.curdir) #当前目录
print(os.getcwd())#当前工作目录
print(os.pardir)#当前目录的上一层
输出:
/home/liqiang/workspace/python/python_tutorials
.
/home/liqiang/workspace/python
..
6. pathlib模块
pathlib 库从 python3.4 开始,到 python3.6 已经比较成熟。如果你的新项目可以直接用 3.6 以上,建议用 pathlib。相比于老式的 os.path 有几个优势:
- 老的路径操作函数管理比较混乱,
有的是导入 os, 有的又是在 os.path
当中,而新的用法统一可以用 pathlib 管理。- 老用法在处理不同操作系统 win,mac 以及 linux 之间很吃力。换了操作系统常常要改代码,还经常需要进行一些额外操作。
老用法主要是函数形式,返回的数据类型通常是字符串
。但是路径和字符串并不等价
,所以在使用 os 操作路径的时候常常还要引入其他类库协助操作。新用法是面向对象,处理起来更灵活方便。- pathlib 简化了很多操作,用起来更轻松。
有两大类一个是纯路径不带I/0操作,另
以上是关于python中常用的内置模块的主要内容,如果未能解决你的问题,请参考以下文章