内置模块

下面我们来讲一些内置的模块,即不需要下载就可以使用的模块

一、sys

import sys
print(sys.argv[1])   #这的1就像shell 的$1
-----------
执行了这个脚本的时候就会看到结果
In [3]: sys.version                                                      
Out[3]: '3.7.6 (default, Dec 31 2019, 14:50:39) \n[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]'

In [4]: sys.version_info          #输出的更加的仔细易读                                          
Out[4]: sys.version_info(major=3, minor=7, micro=6, releaselevel='final', serial=0)

二、os

1.关于目录的一些操作

作用 写法 例子
1 # 获取当前工作目录,即当前python脚本工作的目录路径 os.getcwd() >>> os.getcwd() (输出--> ) '/root'
2 # 切换当前脚本工作目录;相当于shell下cd os.chdir("/home") >>>os.chdir("./python_learning") >>> os.getcwd() '/root/python_learning'
3 # 创建单级目录,相当于 shell 中的 mkdir dirname os.mkdir('dirname') 在当前的目录创建一个目录
4 # 递归创建目录 os.makedirs('递归创建的目录') >>> os.makedirs('/root/dir1/dir2')
5 # 删除单级空目录,若目录非空则无法删除,并报错。 os.rmdir('dirname') In [6]: os.rmdir("dir1") 删除掉当前目录下的dir1目录
6 # 递归删除 空 目录 os.removedirs('dir1/dir2') In [10]: os.removedirs("dir1/dir2") --->ls: 无法访问dir1: 没有那个文件或目录:
7 # 列出指定目录下的所有文件和目录,包括隐藏文件,并以列表方式打印 os.listdir('dirname')
8 # 1>.递归查找目录下的文件和目录,返回一个生成器对象。 #2> .生成器对象是个可迭代对象,每一层包含了三个值: os.walk('dirname') #3> 1. 当前目录路径,2. 其下面的所有子目录, 3. 其下面的所有文件

注意,那个递归的查找目录的方法具体应用如下
In [45]: a,b,c= os.walk('/tmp/a')

In [46]: a,b,c
Out[46]:
(('/tmp/a', ['b'], []),
('/tmp/a/b', ['f'], ['work.txt']),
('/tmp/a/b/f', [], []))

练习:
1. 在 /tmp 目录下,创建目录  a/b/c
In [12]: os.makedirs("/tmp/a/b/c")    

In [14]: !ls /tmp/a/b                                                   
c
-------------------------------------
2.进入到 /tmp/a/b 目录下,创建一个目录 f
In [14]: !ls /tmp/a/b                                                   
c

In [15]: os.chdir("/tmp/a/b")                                           

In [16]: os.getcwd()                                                    
Out[16]: '/tmp/a/b'

In [17]: os.mkdir("f")                                                  

In [18]: !ls                                                            
c  f
-----------------------------------
3.把当前的工作目录写到 f 目录下的 work.txt 文件内。
In [22]: f_obj=open("work.txt",'w',encoding="utf-8")                    

In [23]: f_obj.write('{}'.format(os.getcwd()))                          
Out[23]: 8

In [24]: f_obj.close()                                                  

In [25]: !cat work.txt                                                  
/tmp/a/b
-----------------------------------
4.删除目录 c
In [26]: os.rmdir("/tmp/a/b/c")                                         

In [27]: !ls                                                            
f  work.txt
----------------------------------
5.把 /tmp 目录下及其子目录下的所有文件和目录打印到屏幕上
root,dir,file=
In [45]: for root,dir,file in os.walk('/tmp')
               print(root ,dir,file)                                       

2.对路径的判断

os.path.exists("路径")
如果path存在,返回True;如果path不存在,返回False 在这里值得注意的是

import os
os.path.exists("/etc/passwd")               
#判断路径是否存在
print(os.path.exists("/etc/passwd"))
print(os.path.exists("etc/passwd"))#没有写全
#在Linux shell 中,Python会认为: / 左边一定是一个目录,而不是文件
[root@localhost python_learning]# /usr/local/bin/python3 /root/python_learning/内置模块.py
True
False

os.path.isdir("路径")
如果path是一个存在的目录,则返回True。否则返回False
os.path.isfile("path")
如果path是一个存在的文件,返回True。否则返回False

In [59]: os.path.isfile("/etc/my.cnf.d/")      
Out[59]: False

In [60]: os.path.isdir("/etc/my.cnf.d/")       
Out[60]: True

os.rename("old_name", "new_name")
重命名文件名或目录名

os.path.split("path")
将 path 分割成目录和文件名二元组返回
os.path.abspath("path")
返回 文件 或 path 规范化的绝对路径

import os
os.path.split("/etc/nginx/nginx.conf")
print(os.path.split("/etc/nginx/nginx.conf"))            
#不管这个文件是否存在,只进行切割,以右边的第一个/切割,左边为目录,右边为文件
print(os.path.abspath("/path/to/file"))
#查找文件的绝对路径,然而只是一个简单的拼接过程,不管你输入的文件是否存在
print(os.path.abspath("./file"))
print(os.path.abspath("~/file"))
#只要识别到了/左边有东西就会拼接到当前目录
print(os.path.abspath("bathe/file"))
--------
[root@localhost python_learning]# /usr/local/bin/python3 /root/python_learning/内置模块.py
('/etc/nginx', 'nginx.conf')
/path/to/file
/root/python_learning/file
/root/python_learning/~/file
/root/python_learning/bathe/file

os.path.dirname(path)
以 最右侧的路径分隔符为分界符把路径分隔为两部分, 返回第一部分,就是目录部分。
不关心路径是否真实存在与系统中

print(os.path.dirname("/path/dii"))
print(os.path.dirname("path/database"))
#只会识别到从右边数第一个/并且把/和它右边的去掉
------------
/path
path

os.path.join(path1[, path2[, ...]])
将多个路径组合后返回,每个路径之间不需要加路径分隔符(\或者/)

>>> os.path.join('/home', 'tom', 'bin')
'/home/tom/bin'
>>> os.path.join('/home', '/tom', 'bin')
'/tom/bin'
>>>

三、时间模块

1.time模块

函数 作用
time() 返回当前时间的一个时间戳。
sleep() 线程将推迟指定的时间后运行,单位为秒。其精度为亚秒级
ctime() 将一个时间戳(默认为当前时间)转换成一个时间字符串。
localtime() 将一个时间戳转化为当前地区的一个struct_time()类型元组,未设置默认为当前时间。
gmtime() gmtime()与localtime类似,不过返回的UTC世界标准时间。
mktime() 将一个strut_time 转化为时间戳。
clock() 返回的是程序进程运行时间。
asctime() 把一个代表时间的元组或者struct_time类型元组,转换为类似Thu Mar 21 15:05:36 2019这样的形式。
strptime(‘2011-05-05 16:37:06’, ‘%Y-%m-%d %X’) 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
strftime(’%Y-%m-%d %X’, (2009, 2, 17, 17, 3, 38, 1, 48, 0)) 把一个代表时间的元组或者struct_time类型元组转化为格式化的时间字符串。

结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,当月中第几周,一年中第几天,夏令时)

time()
-----
In [80]: import time                           

In [81]: time.time()                           
Out[81]: 1578315529.3293629
*************************************
sleep
-----
In [82]: time.sleep(2)                         
*************************************
ctime
-----
In [83]: time.ctime(1845878)                   
Out[83]: 'Thu Jan 22 16:44:38 1970'
**************************
localtime
-----
In [84]: time.localtime()                      
Out[84]: time.struct_time(tm_year=2020, tm_mon=1, tm_mday=6, tm_hour=20, tm_min=59, tm_sec=46, tm_wday=0, tm_yday=6, tm_isdst=0)

属性                            值
tm_year(年)                  比如2011 
tm_mon(月)                   1 - 12
tm_mday(日)                  1 - 31
tm_hour(时)                  0 - 23
tm_min(分)                   0 - 59
tm_sec(秒)                   0 - 61
tm_wday(weekday)             0 - 6(0表示周一)
tm_yday(一年中的第几天)        1 - 366
tm_isdst(是否是夏令时)        默认为 0
*************************
strftime把时间格式化
-----
In [85]: time.strftime("%Y-%m-%d %X")          
Out[85]: '2020-01-06 21:03:11'

In [86]: time.strftime("%F %T")                
Out[86]: '2020-01-06 21:03:22'

In [87]:  time.strftime("%H%M%S")              
Out[87]: '210340'
格式 含义
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符
image.png
>>> import time
>>> time.time()
1576917412.379858
 
# 时间戳转换为结构化时间
>>> time.localtime(1576917412.379858)
time.struct_time(tm_year=2019, tm_mon=12, tm_mday=21, tm_hour=16, tm_min=36, tm_sec=52, tm_wday=5, tm_yday=355, tm_isdst=0)
>>>
    
# 将 结构化时间或者时间戳转换为 格式化后的字符串时间
>>> time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1576917412.379858))
'2019-12-21 16:36:52'
>>>
# 将 字符串时间转换为结构化时间
>>> time.strptime('2019-12-21 16:36:52', '%Y-%m-%d %H:%M:%S')
time.struct_time(tm_year=2019, tm_mon=12, tm_mday=21, tm_hour=16, tm_min=36, tm_sec=52, tm_wday=5, tm_yday=355, tm_isdst=-1)
>>>

# 将 指定的字符串时间转换为时间戳
>>> time.mktime(time.strptime('2019-12-21 16:36:52', '%Y-%m-%d %H:%M:%S'))
1576917412.0

2.datetime模块

2.1datatime.datetime
函数 作用 返回值
datetime.datetime.now(): 返回系统当前时间 datetime.datetime(2020, 1, 6, 21, 21, 33, 644208)
datetime.datetime.now().date(): 返回当前时间的日期 datetime.datetime(2020, 1, 6)
datetime.datetime.now().time(): 返回当前时间的时分秒 datetime.datetime(21, 25, 26, 653024)
datetime.datetime.ctime(): 将datetime.datetime类型转化成str类型
datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'): 时间格式转化成字符串: 返回时间的字符串 '2020-01-06 21:29:58'
datetime.datetime.strptime('2018-11-09 14:42:36','%Y-%m-%d %H:%M:%S'): 字符串转化成时间格式 返回datetime.datetime类型的时间 datetime.datetime(2018, 11, 9, 14, 42, 36)

设计一个定时

nowtime = datetime.datetime.now()
restime = datetime.datetime.strptime("2019-09-05 12:00:00",'%Y-%m-%d %H:%M:%S')
restime - nowtime
t = restime - nowtime
print(str(t))

t.days

h,s = divmod(t.seconds, 3600)
m,s =divmod(s,60)

f"{t.days}天{h}小时{m}分{s}秒"

divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。

那么可以得到交互式是定时

import datetime

def handle_seconds(second):
    t = datetime.timedelta(seconds=second)

    # 计算多少小时,多少秒
    # 一个小时 3600 秒,这里divmod 内置函数取商数和余数
    h,s = divmod(t.seconds, 3600)

    # 计算多少分钟和多少秒
    m,s =divmod(s,60)

    if t.days > 0 :
        tpl = "{days}天{h}小时{m}分{s}秒"
        msg = tpl.format(days=t.days, h=h, m=m, s=s)
    elif t.days == 0 and h > 0:
        tpl = "{h}小时{m}分{s}秒"
        msg = tpl.format(h=h, m=m, s=s)
    elif h == 0 and m > 0:
        tpl = "{m}分{s}秒"
        msg = tpl.format(m=m, s=s)
    elif m == 0 and s > 0:
        tpl = "{s}秒"
        msg = tpl.format(s=s)
    else:
        msg = "刚刚"
    print(msg)
2.2datetime.timedelta

Python datetime之timedelta
该函数表示两个时间的间隔
参数可选、默认值都为0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

比如要输出当前时间一小时之后的时间:

from datetime import datetime,timedelta

time1 = datetime.now()

print time1
print time1.strftime("%y-%m-%d %H:%M:%S")
print (time1+timedelta(hours =1)).strftime("%y-%m-%d %H:%M:%S")
输出的时间比上面的的那个少了1小时

四、压缩打包模块shutil模块

文件 文件夹 压缩包 处理模块
1.copyfile('被拷贝的文件','拷贝的文件')
拷贝文件的内容到另一个文件中,参数是文件的相对路径或者绝对路径

import shutil
shutil.copyfile('./src.file','./dst.file')

2.copy2('被拷贝的文件','拷贝的文件')
拷贝文件和权限
3.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹

ignore=shutil.ignore_patterns('排除的文件名', '排除的文件夹名') 支持通配符,假如有多个用逗号隔开
shutil.ignore_patterns(*patterns) 忽略某些文件

shutil.copytree('/home','/tmp/hbak',
                ignore=shutil.ignore_patterns('*.txt'))
# 递归拷贝一个文件夹下的所有内容到另一个目录下,目标目录应该是原来系统中不存在的

4.shutil.rmtree('/tmp/hb')
递归删除一个文件夹下的所有内容

# 最后结尾的一定是明确的文件名,不可以类似下面这样
shutil.rmtree('/tmp/hbak/*')

5.shutil.move('/home/src.file', './shark')
递归的去移动文件,它类似mv命令。

6.shutil.make_archive('shark', # 压缩后文件名 'gztar', # 指定的压缩格式 '/home/shark/') # 被压缩的文件夹名字

# 将 /home/shark 目录下的所以文件打包压缩到 /tmp 目录下,名字shark,格式 tar
shutil.make_archive( '/tmp/shark','tar','/home/shark/')

# 查看当前 python 环境下支持的压缩格式
ret = shutil.get_archive_formats()
print(ret)

7.shutil.unpack_archive('./a/b.tar.gz' #解压的文件名 , './a/c/' #解压到哪个路径下,'gztar' #压缩的格式)
解压缩

五、subprocess

subprocess 是开启一个系统基本的单个进程,执行 shell 命令,可以得到命令的执行结果。

In [21]: subprocess.getoutput('ls')                                                            
Out[21]: 'bin\ncreate.py\nlib\npackage\npage\n__pycache__\nPython-3.7.3\nPython-3.7.3.tgz\ntest.py\ntests.py\n参数.py\n操作redis.py\n调试mysql.py\n调试代码.py\n内置模块.py'

In [22]: ret = subprocess.getstatusoutput('ls')                                                

In [23]: ret = subprocess.getstatusoutput('date -u')            
#可以看看有没有执行成功,                                

In [24]: ret                                                                                   
Out[24]: (0, '2020年 01月 06日 星期一 06:28:44 UTC')
#执行成功会在前面有一个$?的返回
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容