第十四章 常用内置模块

一、sys 模块

import sys
sys.argv         # 命令行参数列表,第一个元素是程序本身路径;用于接收执行
                 # Python 脚本时传的参数
# 示例:
python3 echo.py  a b c

# echo.py 文件内容
import sys
print(sys.argv[1:])

# 输出结果
['a', 'b', 'c']

sys.exit(n)    # 退出程序,正常退出时exit(0)
sys.version    # 获取Python解释程序的版本信息
sys.platform   # 返回操作系统平台名称
sys.path       # 模块名搜索路径



二、os 模块

import os
# 获取当前工作目录,即当前python脚本工作的目录路径
os.getcwd()

# 切换当前脚本工作目录;相当于shell下cd
os.chdir("./dirname")      

# 创建单级目录,相当于 shell 中的 mkdir dirname
os.mkdir('dirname')

# 递归创建目录
os.makedirs('dir1/dir2')

# 删除单级空目录,若目录非空则无法删除,并报错。
os.rmdir('dirname') 

# 递归删除 空 目录
os.removedirs('dir1/dir2')  

# 列出指定目录下的所有文件和目录,包括隐藏文件,并以列表方式打印
os.listdir('dirname')

# 递归查找目录下的文件和目录,返回一个生成器对象。
# 生成器对象是个可迭代对象,每一层包含了三个值:
# 1\. 当前目录路径,2\. 其下面的所有子目录, 3\. 其下面的所有文件
os.walk('dirname')

### 练习需求 ###
1.  在 /tmp 目录下,创建目录  a/b/c
2.  进入到 /tmp/a/b 目录下,创建一个目录 f
3.  把当前的工作目录写到 f 目录下的 work.txt 文件内。
4.  删除目录 c
5.  把 /tmp 目录下及其子目录下的所有文件和目录打印到屏幕上

# 如果path存在,返回True;如果path不存在,返回False 在这里值得注意的是,
# 在Linux shell 中,Python会认为: / 左边一定是一个目录,而不是文件
os.path.exists(path) 

# 如果path是一个存在的目录,则返回True。否则返回False
os.path.isdir(path)

# 如果path是一个存在的文件,返回True。否则返回False
os.path.isfile(path)

# 删除一个文件
os.remove('file')

# 重命名文件/目录
os.rename("oldname", "new")

# 如果path是绝对路径,返回 True
os.path.isabs(path)

# 将 path 分割成目录和文件名二元组返回
os.path.split(path)

# 返回 文件 或 path 规范化的绝对路径
os.path.abspath(path)

# 返回path的目录。 其实返回的就是 os.path.split(path) 的第一个元素
os.path.dirname(path)

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



三、时间模块

1. time 模块

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

  • 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始到目前的秒数。我们运行 type(time.time()),返回的是float类型。

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

    属性                            值
    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
    
    
  • 格式化的时间字符串(Format String)

# 快速认识它们
In [139]: import time

In [140]: time.time()
Out[140]: 1522057206.0065496

In [141]: time.localtime()     # 本地时间, 结构化时间
Out[141]: time.struct_time(tm_year=2018, tm_mon=3, tm_mday=26, tm_hour=17, tm_min=40, tm_sec=53, tm_wday=0, tm_yday=85, tm_isdst=0)

In [142]: time.gmtime()        # 格林威治时间(UTC)
Out[142]: time.struct_time(tm_year=2018, tm_mon=3, tm_mday=26, tm_hour=9, tm_min=43, tm_sec=31, tm_wday=0, tm_yday=85, tm_isdst=0)

In [143]: time.strftime("%Y-%m-%d %X")
Out[143]: '2018-03-26 17:40:40'

格式化时间的变量:

格式 含义
%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 时区的名字(如果不存在为空字符)
%% ‘%’字符

时间的互相装换

第十四章 常用内置模块_第1张图片
image
In [153]: time.time()
Out[153]: 1522071229.4780636

In [154]: time.localtime(1522071229.4780636)

In [155]: time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1522071229.4780636))

In [156]: time.strptime('2018-03-26 21:41', "%Y-%m-%d %H:%M")

In [157]: time.mktime(time.localtime())

In [178]: time.ctime(1093849081)
Out[178]: 'Mon Aug 30 14:58:01 2004'

In [179]: time.asctime(time.localtime())
Out[179]: 'Mon Mar 26 21:49:41 2018'

In [183]: time.strptime('Mon mar 04 21:53:42 2018')

In [182]: time.strptime('Mon mar 04 21:53:42 2018', "%a %b %d %H:%M:%S %Y")

time.sleep(5)        # 休眠 5 秒钟

print(time.clock())  # 精确到毫秒

2. datetime 模块

import datetime
In [192]: str(datetime.date.fromtimestamp(time.time()))
Out[192]: '2018-03-26'

In [193]: str(datetime.datetime.now())
Out[193]: '2018-03-26 22:09:44.424473'

In [194]: datetime.datetime.now() + datetime.timedelta(3)
Out[194]: datetime.datetime(2018, 3, 29, 22, 10, 42, 315584)

In [196]: datetime.datetime.now() + datetime.timedelta(minutes=30)
Out[196]: datetime.datetime(2018, 3, 26, 22, 41, 32, 44547)

In [15]: datetime.date.strftime(datetime.datetime.now(),'%Y-%m')
Out[15]: '2018-04'

In [16]: datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m')
Out[16]: '2018-04'



四、压缩打包模块

shutil 是 Python3 中高级的文件 文件夹 压缩包 处理模块

拷贝文件

拷贝文件的内容到另一个文件中,参数是文件的相对路径或者绝对路径

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

拷贝文件和权限

import shutil
shutil.copy2('f1.log', 'f2.log')

递归拷贝

递归的去拷贝文件夹

shutil.copytree(src, dst, symlinks=False, ignore=None)

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

shutil.ignore_patterns(patterns)* 忽略某些文件

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

删除

递归删除一个文件夹下的所有内容

shutil.rmtree('/tmp/hb')
shutil.rmtree('/tmp/hbad/')

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

递归的去移动文件,它类似mv命令。

shutil.move('/home/src.file', './shark') 

创建压缩包并返回文件路径,例如:zip、tar

# 将 /home/shark 目录下的所以文件打包压缩到当前目录下,
# 名字 shark,格式 gztar。扩展名会自动根据格式自动生成。

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)

解压缩

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



五、subprocess 模块执行本机系统命令

os.system() 执行的命令只是把命令的结果输出导终端,程序中无法拿到执行命令的结果。

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

# 在 shell 中运行命令,并且获取到标准正确输出、标准错误输出
In [209]: subprocess.getoutput('ls |grep t')
Out[209]: 'test.py' 

In [222]: ret = subprocess.getstatusoutput('date -u')

In [223]: ret
Out[223]: (0, '2018年 03月 26日 星期一 14:46:42 UTC')

你可能感兴趣的:(第十四章 常用内置模块)