python中常用的内置模块

Posted 非晚非晚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中常用的内置模块相关的知识,希望对你有一定的参考价值。

1. time模块

(1)功能汇总

在Python中,通常有这3种方式来表示时间:

  1. 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(time.time())”,返回的是float类型。通常用于时间间隔的计算

  1. 格式化的时间字符串(Format String)(按照某种格式显示的)例如‘1999-12-06’。通常用于格式化显示时间
符号说明
%y两位数的年份表示(00-99)
%Y四位数的年份表示(000-9999)
%m月份(01-12)
%d月内中的一天(0-31)
%H24小时制小时数(0-23)
%I12小时制小时数(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. 结构化时间(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
索引(Index)属性(Attribute)值(Values)
0tm_year(年)比如2011
1tm_mon(月)1 - 12
2tm_mday(日)1 - 31
3tm_hour(时)0 - 23
4tm_min(分)0 - 59
5tm_sec(秒)0 - 60
6tm_wday(weekday)0 - 6(0表示周一)
7tm_yday(一年中的第几天)1 - 366
8tm_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.MAXYEAR9999
MINYEAR返回能表示的最小年份datetime.MINYEAR1

(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)功能汇总

  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排。
  1. calendar.prcal(year,w=2,l=1,c=6, m=3)也是打印一年的年历,相当于print(calendar.calendar(year,w,l,c))。
  2. calendar.month(2019, 10, w=0, l=0),打印某一个月的日历。
  3. calendar.timegm(tupletime)接受一个时间元组,返回时间戳,时间元组的值依次表示年、月、日、时、分、秒。
  4. calendar.weekday(year,month,day)返回传入的日期是星期几。
  5. calendar.isleap(year)返回传入的年是不是闰年,是返回True,否则为false。如2020年是闰年。
  6. 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.executablePython解释器可执行文件的绝对路径
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中常用的内置模块的主要内容,如果未能解决你的问题,请参考以下文章

python笔记--内置模块

Python 常用模块学习

Python常用内置模块

Python中常用的模块

python_常用内置模块

盘点Python常用的模块和包