一、time模块
- 计算机的起始时间:
- 英国伦敦时间: 1970.1.1.0:0:0
- 北京时间: 1970.1.1.8:0:0
- 时间戳时间:
- time.time()获取当前时间的时间戳
- 时间戳是一个float格式的,例如:1581652597.4924521
- 格式化时间(str format time):
- time.strftime(‘%Y-%m-%d %H:%m:%s’)
- 输出的结果是:2020-02-14 11:02:1581652723
- A:表示的是星期几
- str数据类型
- 注意:Y、H、M、S必须大写,m、d是小写,如果Y改成y,那么年份只显示后半部分,例如:2021显示为21
- 结构化时间:
- time_obj = time.localtime()获取当前的结构化时间
- 输出格式:time.struct_time(tm_year=2020, tm_mon=2, tm_mday=14, tm_hour=11, tm_min=50, tm_sec=15, tm_wday=4, tm_yday=45, tm_isdst=0)
- time对象类型
结构化时间是时间戳时间向格式化时间转换的中间类型的时间,并且可以通过time_obj.属性获取每一个属性对应的值。
时间戳时间是给机器看的,格式化时间是给人看的,结构化时间是时间戳时间和格式化时间之间转换的中间状态
时间格式的转换:
- strptime(‘需要被转换的时间’, ‘转换的格式’)
- strftime(‘转换格式’, 转换对象)
'''时间转换'''
print(time.time())
time_obj = time.localtime(1581655609)
str_time = time.strftime('%H-%m-%d %H:%M:%S', time_obj)
# 从结构化时间戳转换为格式化时间需要两个参数:格式化要求和结构化时间对象
print(str_time)
time_obj = time.strptime('2020-02-14', '%Y-%m-%d')
print(time_obj)
time = time.mktime(time_obj)
print(time)
二、random模块
- 导入模块:import random
- 随机小数:random.random()
- 0-1之内的随机小数,每个小数取到的概率是相同的
- 计算机不能表示无限不循环小数,无限循环小数包含在float中
随机整数:
- random.randint(1,4),顾头顾尾,包含1和4的随机整数。
- random.randrange(1,2),顾头不顾尾,不包含2的随机整数。
- random.randrange(1,10,2),顾头不顾尾,设置步伐为2
只有randrange()才可以设置步伐
随机抽取:
- random.choice(object),object是被抽取的对象,choice每次只能被随机抽取对象中的一个值
- random.sample(object, count),object被抽取对象,count一次抽取几个值。
需要注意的是:
打乱顺序:
random.shuffle(object),在原对象的基础上做乱序处理。必须是可以迭代的对象才能使用乱序。
三、sys模块
- sys.path: 当前文件的路径
- sys.modules: 当前文件一共导入了多少的路径存在内存中
- sys.platform: python解释器定义的当前的操作系统,这个是和python解释器打交道的,这个不准确
- sys.exit(): 执行退出程序,退出后后续的程序不会再执行。
- sys.argv: 交互时输入的内容
- 命令行运行文件:在命令行中输入python 路径/执行的文件.py 交互数据1 交互数据2 交互数据3…
- 交互数据必须是在文件中的程序里定义好的,交互数据之间以逗号隔开,数据的顺序必须和程序总的顺序保持一致。
- 程序中必须把交互数据名在程序之前定义好,例如:name = sys.argv[1],pwd = sys.argv[2], 注意这里也是下标,但是是从1开始,不是0
- sys.argv的作用和input的作用基本一致,都是用于交互使用,在实际的开发中argv更加普遍
- 运维人员在测试程序的时候一般都是在命令行一次把所有的内容全部输入完成执行程序,而使用的时候需要不断的进行交互,不停的输入。
- 从系统的角度来讲,当系统调度一个资源执行程序时,如果用input进行输入时系统会把程序放在阻塞队列,当输入完成后把程序放在就绪队列,需要等到分配资源的时候才能再次执行,这样会消耗资源和浪费时间,而sys.argv在启动文件的时候直接就输入了交互数据,避免造成阻塞。
# 文件名:sys模块.py
name = sys.argv[1]
# 输入的第一个下标为1
pwd = sys.argv[2]
# 输入的第二个下标为2
if name == 'alex' and pwd == '1234':
print('执行以下程序')
for i in range(10):
if i <= 6:
print(i)
else:
sys.exit()
else:
print("输入错误")
sys.exit()
# item2命令行输入:
python 路径/sys模块.py alex 1234
'''
打印结果:
执行以下程序
0
1
2
3
4
5
6
'''
四、os模块
os模块是和操作系统直接进行交互的,sys模块是直接和python解释器进行交互的。
一、和工作目录有关的
- os.getcwd():获取当前文件的工作目录,不是文件的存放路径,而是文件在哪个路径执行打印的就是哪个路径。如果希望获取当前文件所在的路径,那么就使用file。
- os.chdir(‘工作路径’):强制修改工作路径,修改后无论在哪里执行,getcwd()获取的工作路径都将是设定好的工作路径。
- os.curdir: 获取当前目录名字,返回值永远是点号
os.pardir: 获取上一级目录名字,返回值永远是双点号
二、创建、删除文件/文件夹
文件夹操作
- 创建文件夹
- 创建单个文件夹(单级目录):os.mkdir(‘目录名’)
- 创建多级文件夹(多级目录): os.makedirs(‘dir1/dir2/dir3/dir4’)
- 删除文件夹
- 删除单个文件夹:os.rmdir(‘创建多级目录时的所有目录’)
- 每次删除最后一个目录
- 不能删除非空文件夹
- 删除多个文件夹:os.removedirs(‘多级目录’)
- 递归:删除当前空文件后,如果发现上一级目录为空则继续删除
- 如果发现上级目录不为空,则停止删除。
- 删除单个文件夹:os.rmdir(‘创建多级目录时的所有目录’)
- 查看路径下的所有文件夹:os.listdir(‘/Volumes/workspace’),返回值是列表。
- 创建文件夹
文件操作
- 删除一个文件:os.remove(‘文件名字.后缀’)
- 文件夹/文件重命名:os.rename(‘oldname’, ‘newname’)
- 查看文件的信息:os.stat(‘path/文件名.后缀’),查看文件的所有信息。
- 返回值实例:os.stat_result(st_mode=33188, st_ino=158673, st_dev=16777217, st_nlink=1, st_uid=501, st_gid=80, st_size=560, st_atime=1581670933, st_mtime=1581670932, st_ctime=1581670932)
操作系统目录分割符:os.sep,查看当前文件所在操作系统的目录分割符。
- 当前平台文件的行终止符号:os.linesep,windows平台是’\r\n’, mac、linux下是’\n’。
- 操作系统下文件不同路径之间的分割符:os.pathsep,在windows下分割符为分号,在mac、linux下是冒号。
- 操作系统名称:os.name,windows操作系统输出为’nt’, mac/linux操作系统输出的是’posix’。
'''跨平台拼接路径'''
path_list = ['Volumes','workspace','python-study','re_st']
path = os.sep + os.sep.join(path_list)
# os.sep获取目录分割符
print(path)
四、使用python解释器来和操作系统命令交互
pass
五、查看环境变量
- 格式:os.environ
- 返回值是一个字典格式的数据{名称:路径}
import os
print(os.getcwd())
os.chdir('/Volumes/workspace/python-study/')
print(os.getcwd())
os.chdir('/Volumes/workspace/python-study/re_st')
print(os.getcwd())
print(os.curdir)
print(os.pardir)
print(__file__)
# os.mkdir('test_dir1')
#创建单个目录
#os.makedirs('dir1/dir2/dir3/dir4')
#os.rmdir('dir1/dir2/dir3')
#os.removedirs('dir1/dir2/dir3/dir4')
print(os.listdir('/Volumes/workspace'))
#os.remove('test1.py')
os.mkdir('dir1')
os.rename('dir1', 'dir')
print(os.stat('/Volumes/workspace/python-study/re_st/os模块.py'))
print(os.sep)
# 当前文件所在操作系统的目录分隔符
print([os.linesep])
print(os.pathsep)
print(os.name)
path_list = ['Volumes','workspace','python-study','re_st']
path = os.sep + os.sep.join(path_list)
print(path)
print(os.environ)
'''
/Volumes/workspace/python-study/re_st
/Volumes/workspace/python-study
/Volumes/workspace/python-study/re_st
.
..
/Volumes/workspace/python-study/re_st/os模块.py
['.DocumentRevisions-V100', '.DS_Store', '.fseventsd', '.Spotlight-V100', '.TemporaryItems', '.Trashes', 'blog', 'Django-study', 'python-study', 'tools-study', 'web-front']
os.stat_result(st_mode=33188, st_ino=158673, st_dev=16777217, st_nlink=1, st_uid=501, st_gid=80, st_size=780, st_atime=1581673634, st_mtime=1581673634, st_ctime=1581673634)
/
['\n']
:
posix
/Volumes/workspace/python-study/re_st
environ({'SHELL': '/bin/zsh', 'TMPDIR': '/var/folders/f7/h_cbfssx65b4dtpr3xj7w7c40000gn/T/', 'GOBIN': '/Users/hopkings/www/Go/bin', 'BOWER': '/usr/local/Cellar/node/13.1.0/libexec/npm/lib/node_modules/bower/bin', 'USER': 'liquanhui', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.2ySYYeLzL0/Listeners', '__CF_USER_TEXT_ENCODING': '0x1F5:0x19:0x34', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Users/hopkings/www/Go/bin:/usr/local/Cellar/node/13.1.0/libexec/npm/lib/node_modules/bower/bin:/sbin:/usr/bin:/usr/sbin', 'PWD': '/Volumes/workspace/python-study/re_st', 'XPC_FLAGS': '0x0', 'XPC_SERVICE_NAME': '0', 'SHLVL': '1', 'HOME': '/Users/liquanhui', 'LOGNAME': 'liquanhui', 'GOPATH': '/Users/hopkings/www/Go', '_': '/usr/local/bin/python3', '__PYVENV_LAUNCHER__': '/usr/local/bin/python3', 'LC_CTYPE': 'UTF-8'})
'''
四、os.path系列
- os.path.abspath(path或者文件.后缀): 返回规范化的绝对路径
- 如果传入的是文件,那么返回的是文件的绝对路径
- 如果传入的是不规范的路径,那么返回的是规范后的路径
- os.path.split(path+文件名.后缀/path):返回的是元组类型,第一部分是除最后一个部分外的所有路径,第二部分是文件名.后缀或者最后一个目录名。
print(os.path.split('/Volumes/workspace/python-study/re_st/os模块.py'))
print(os.path.split('/Volumes/workspace/python-study/re_st'))
'''
结果是:
('/Volumes/workspace/python-study/re_st', 'os模块.py')
('/Volumes/workspace/python-study', 're_st')
'''
- os.path.exists(path): 判断path是否存在,如果存在返回为True,不存在返回为False
- os.path.dirname(path):取除了最后一个以外的所有内容
- os.path.basename(path): 取path中最后一个内容,和dirname刚好相反
print(os.path.dirname('/Volumes/workspace/python-study/re_st'))
print(os.path.dirname('/Volumes/workspace/python-study/re_st/os模块.py'))
print(os.path.basename('/Volumes/workspace/python-study/re_st/os模块.py'))
'''
结果为
/Volumes/workspace/python-study
/Volumes/workspace/python-study/re_st
os模块.py
'''
- os.path.isdir(path/file): 如果是绝对路径返回为True,不是返回为False
- os.path.isfile(path/file): 如果是文件返回为True,反之返回为False。
print(os.path.isfile('os模块.py'))
print(os.path.isfile('/Volumes/workspace/python-study'))
print(os.path.isdir('/Volumes/workspace/python-study'))
print(os.path.isdir('os模块.py'))
'''
'''
结果为:
True
False
True
False
- os.path.join(path, 新增路径1,新增路径2……): 系统会把新增路径拼接到path后,如果路径不规范可以使用os.path.abspath(total_path)规范路径
- os.path.getatime(path):路径的最后访问时间
- os.path.getmtime(path):路径的最后修改时间
- os.path.getsize(path): 路径/文件的大小(字节)
print(os.path.getsize('/Volumes'))
print(os.path.getsize('/Volumes/workspace'))
print(os.path.getsize('/Volumes/workspace/python-study'))
print(os.path.getsize('/Volumes/workspace/python-study/re_st'))
print(os.path.getsize('/Volumes/workspace/python-study/re_st/os模块.py'))
'''
结果是:
256
578
272
1360
2429
'''
五、扩展用法
os.urandom()用法:
os.urandom(num)用于生成一个随机的不定长的字节,num是生成的位数,根据num来随机生成,这个用法可以很好的用在登陆或者校验上。
import os
result = os.urandom(10)
# 结果是:b'V\n\xd6\x9e+\x04\x84\x8e{\x0e'