本文链接:https://www.jianshu.com/p/f3f91fa47c03
作者:西瓜甜
一、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 # 返回操作系统平台名称
二、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 目录下及其子目录下的所有文件和目录打印到屏幕上
os.path.exists("path")
path 需要时字符串类型
如果path存在,返回True;如果path不存在,返回False 在这里值得注意的是,
在Linux shell 中,Python会认为: / 左边一定是一个目录,而不是文件
>>> os.path.exists("/etc/passwd")
True
>>> os.path.exists("/etc/passwd/")
False
>>> os.path.exists("/etc/ddd")
False
>>>
os.path.isdir("path")
如果path是一个存在的目录,则返回True。否则返回False
os.path.isfile("path")
如果path是一个存在的文件,返回True。否则返回False
os.remove('/path/ot/file')
删除一个文件
os.rename("old_name", "new_name")
重命名文件名或目录名
os.path.split("path")
将 path 分割成目录和文件名二元组返回
>>> import os
>>> os.path.split("/etc/nginx/nginx.conf")
('/etc/nginx', 'nginx.conf')
>>> nginx_dir, nginx_conf = os.path.split("/etc/nginx/nginx.conf")
>>> nginx_dir
'/etc/nginx'
>>> nginx_conf
'nginx.conf'
>>>
注意: 这里并不关心路径是否真实存在与当前系统中
os.path.abspath("path")
返回 文件 或 path 规范化的绝对路径
>>> os.path.abspath("/path/to/file")
'/path/to/file'
>>> os.path.abspath("./file")
'/Users/yanshunjun/file'
>>> os.path.abspath("~/.bashrc")
'/Users/yanshunjun/~/.bashrc'
>>> os.path.abspath("~/file")
'/Users/yanshunjun/~/file'
>>> os.path.abspath("$HOME/file")
'/Users/yanshunjun/$HOME/file'
不支持 shell 的 变量
os.path.dirname(path) -- 重要
以 最右侧的路径分隔符为分界符把路径分隔为两部分, 返回第一部分,就是目录部分。
不关心路径是否真实存在与系统中
>>> os.path.dirname('/path/to/file')
'/path/to'
>>> os.path.dirname('/path/to/file/')
'/path/to/file'
>>>
os.path.join(path1[, path2[, ...]]) -- 常用
将多个路径组合后返回,每个路径之间不需要加路径分隔符(\或者/)
>>> os.path.join('/home', 'tom', 'bin')
'/home/tom/bin'
>>> os.path.join('/home', '/tom', 'bin')
'/tom/bin'
>>>
三、时间模块
1. time 模块
在Python中,通常有这几种方式来表示时间:
-
时间戳(timestamp):
通常来说,它是自Unix时代以来经过的秒数,即UTC( "世界标准时间")时间 1970 年1月1日 00:00:00 到目前经过了多少秒。>>> import time >>> time.time() 1576916012.8988988 >>> type( time.time() ) <class 'float'> >>>
-
结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,当月中第几周,一年中第几天,夏令时)
本地时间的结构化时间
>>> time.localtime() time.struct_time(tm_year=2019, tm_mon=12, tm_mday=21, tm_hour=16, tm_min=16, tm_sec=28, tm_wday=5, tm_yday=355, 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
-
格式化的时间字符串(Format String)
>>> time.strftime("%Y-%m-%d %X")
'2019-12-21 16:17:34'
>>> time.strftime("%F %T")
'2019-12-21 16:17:42'
>>> time.strftime("%H%M%S")
'161836'
>>>
格式化时间的变量:
格式 | 含义 |
---|---|
%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 | 时区的名字(如果不存在为空字符) |
%% | ‘%’字符 |
时间的互相转换

>>> 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
其他日志格式转换(扩展)
# 将指定的时间戳转换为 Apa
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")
2. datetime 模块
时间加减
In [ 192 ]: import datetime
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)
时间格式转换
>>> datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m %T')
'2019-12 16:56:42'
>>> datetime.date.strftime(datetime.datetime.now(),'%Y-%m %T')
'2019-12 16:56:52'
>>>
小练习
创建一个文件,文件名为格式为: 自己名字的全拼时分秒.txt
写入一行内容: 当天的日期,格式为: 今天是:当前年当前月_当前日
例如:
文件名: yanshunjun1107.txt
内容如下:
今天是:2019年03月_29日
三、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')
网友评论