python之常用模块一(time、random、os、sys)

时间:2021-05-08 01:56:17
摘要:时间模块time 、随机模块random 、os模块、sys模块

一、时间模块
三种格式
时间戳时间:浮点数 单位为秒
时间戳起始时间:
1970.1.1 0:0:0 英国伦敦时间
1970.1.1 8:0:0 我国(东8区)
结构化时间:元组(struct_time)
格式化时间:str数据类型的 import time 1、常用方法:time.sleep(secs) 推迟指定的时间运行,单位是秒 for i in range(3):
time.sleep(1)
print(i) 2、表示时间的三种方式:时间戳(timestamp)、元组(struct_time)、格式化(str_time)的时间字符串
(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
我们运行“type(time.time())”,返回的是float类型。
print(time.time()) # 1536050072.5732844(1970年1月1日00:00:00到此刻运行time.time()的时间) (2)结构化时间(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一周中第几天,一年中第几天,夏令时)
struct_time = time.localtime()
print(struct_time)
# time.struct_time(tm_year=2018, tm_mon=9, tm_mday=4, tm_hour=16, tm_min=40, tm_sec=1, tm_wday=1, tm_yday=247, tm_isdst=0) struct_time = time.gmtime() # 伦敦的时间
print(struct_time)
# time.struct_time(tm_year=2018, tm_mon=9, tm_mday=4, tm_hour=8, tm_min=40, tm_sec=1, tm_wday=1, tm_yday=247, tm_isdst=0) (3)格式化时间(Format_string):
fmt1 =time.strftime('%H:%M:%S') # 时分秒(全大写)
fmt2 =time.strftime('%Y-%m-%d') # 年月日(年可大写可小写,月日小写)
fmt3 =time.strftime('%y-%m-%d') # 年月日
fmt4 =time.strftime('%c') # 本地相应的日期表示和时间表示 print(fmt1) # 16:49:03
print(fmt2) # 2018-09-04
print(fmt3) # 18-09-04
print(fmt4) # Tue Sep 4 16:49:03 2018
    %y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(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 当前时区的名称
%% %号本身

python中时间日期格式化符号

3、几种时间格式间的转换
python之常用模块一(time、random、os、sys)
Timestamp ---> struct_time: localtime(转成我国的时间)、gmtime(转成伦敦时间)
struct_time ---> Timestamp: mktime Format_string ---> struct_time: strptime
struct_time ---> Format_string: strftime 例题:
1,把格式化时间2018年8月8日转成时间戳时间
str_time = '2018-8-8'
struct_time = time.strptime(str_time,'%Y-%m-%d')
print(struct_time) # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=220, tm_isdst=-1)
timestamp = time.mktime(struct_time)
print(timestamp) # 1533657600.0 2,把时间戳时间转成格式化时间
timestamp = 1500000000
struct_time = time.localtime(timestamp)
str_time = time.strftime('%Y-%m-%d',struct_time)
print(str_time) # 2017-07-14 3,写函数,计算本月1号的时间戳时间
通过我拿到的这个时间,能迅速的知道我现在所在时间的年 月
def get_timestamp():
str_time = time.strftime('%Y-%m-1')
struct_time = time.strptime(str_time,'%Y-%m-%d')
timestamp = time.mktime(struct_time)
return timestamp
ret = get_timestamp()
print(ret) 二、随机模块
import random
1、取随机小数 *
print(random.random()) # 大于0且小于1之间的小数(0,1)
print(random.uniform(1,3)) # 大于n且小于m之间的小数(n,m) 2、取随机整数 ****
print(random.randint(1,4)) # 1到4之间的整数,包括1和4, [1,4]
print(random.randrange(1,4)) # 1到4之间的整数,包括1,但是不包括4, [1,4)
print(random.randrange(1,100,2)) # 1到100之间的奇数 3、随机选择一个返回(字典和集合不可以) ****
3-1、列表:
lst = [1,2,3,4,5,('a','b'),'cc','dd']
ret = random.choice(lst)
print(ret) 3-2、元组:
tu = (1,2,3,('a','b'),[4,5],{'name':'SB'})
ret = random.choice(tu)
print(ret) 3-3、range:
ret = random.choice(range(100))
print(ret) 3-4、str
ret = random.choice('abcd')
print(ret) 4、随机选择多个元素组成一个列表并返回
4-1、列表:
lst = [1,2,3,4,5,('a','b'),'cc','dd']
ret = random.sample(lst,3)
print(ret) 4-2、元组:
tu = (1,2,3,('a','b'),[4,5],{'name':'SB'})
ret = random.sample(tu,3)
print(ret) 4-3、range:
ret = random.sample(range(100),3)
print(ret) 4-4、str
ret = random.sample('abcde',3)
print(ret) 5、乱序(在原来的基础上乱序) ***
lst = [1,2,3,4,5,('a','b'),'cc','dd']
random.shuffle(lst)
print(lst) 6、验证码
6-1、要随机生成n位数字验证码
def get_code(n=6):
code = ''
for i in range(n):
num = random.randint(0,9)
code += str(num)
return code
ret1 = get_code()
ret2 = get_code(4)
print(ret1,ret2) 6-2请你生成一个6位验证码(数字和字母)
字母的生成可以使用内置方法chr :
生成一个随机字母
65-90 A-Z:
num = random.randint(65,90)
print(chr(num)) 97-122 a-z:
num = random.randint(97,122)
print(chr(num)) def get_code(n=6):
code = ''
for i in range(n):
num = random.randint(0,9)
alpha_upper = chr(random.randint(65,90))
alpha_lower = chr(random.randint(97,122))
c = random.choice([num,alpha_upper,alpha_lower])
code += str(c)
return code
ret = get_code()
print(ret) 6-3、可以选择生成纯数字或者数字和字母混合的验证码
def get_code(n=6,alph_flag=True):
code = ''
for i in range(n):
c = random.randint(0,9)
if alph_flag:
alpha_upper = chr(random.randint(65,90))
alpha_lower = chr(random.randint(97,122))
c = random.choice([c,alpha_lower,alpha_upper])
code += str(c)
return code
ret = get_code()
# ret = get_code(6,False)
print(ret) 三、os模块:os模块是与操作系统交互的一个接口
第一部分:文件和文件夹的操作相关
1、os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.mkdir('dirname') 2、os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.makedirs('dirname1/dirname2') 3、os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.rmdir('dirname') 4、os.removedirs('dirname1/dirname2') 从右往左删,若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.removedirs('dirname1/dirname2') 5、os.remove() 删除一个文件
os.remove('a.txt') 6、os.rename("oldname","newname") 重命名文件/目录
os.rename('a.txt','b.txt') # 文件a.txt重命名未b.txt
os.rename('name1','name2') # 文件夹name1重命名未name2 7、os.listdir('path') 列出指定目录下的所有文件和子目录(只找当前的目录和文件,子目录还有其他文件也不会显示),包括隐藏文件,并以列表方式打印
ret = os.listdir('E:\PythonProject')
print(ret) # ['test.py', 'project', venv'] # 即使目录project下还有很多文件,也不会显示,只会显示project文件夹 8、os.stat('path/filename') 获取文件/目录信息
print(os.stat('E:\PythonProject\\t3.py'))
结果:
os.stat_result(st_mode=33206, st_ino=16044073672519102, st_dev=3784701186, st_nlink=1, st_uid=0, st_gid=0,
st_size=5199, st_atime=1536062346, st_mtime=1536062346, st_ctime=1536049667)
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,
在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

stat 结构说明

9、环境变量相关
# 获取当前环境下所有环境变量
os.environ # 是一个大字典 # 获取某个环境变量
os.environ.get("path")
os.getenv("path") # 设置环境变量
os.environ["TEST"] = "测试路径"
os.putenv("TEST", "测试路径")
10、os.walk()函数
python之常用模块一(time、random、os、sys) 第二部分:路径相关
# __file__文件中的一个内置变量,表示执行当前模块的路径。
但是:
如果当前文件包含在sys.path里面,那么,__file__返回一个相对路径!
如果当前文件不包含在sys.path里面,那么__file__返回一个绝对路径!
print(__file__) # E:/PythonProject/t1.py 0、os.path.realpath(path) 返回path的真实路径
ret = os.path.realpath("../") # 执行当前脚本的路径是 E:\\PythonProject\project\test\test.py
print(ret) # E:\\PythonProject\project
1、os.path.abspath(path) 返回path规范化的绝对路径 *****
ret1 = os.path.abspath('E:/PythonProject')
print(ret1) # E:\PythonProject 2、os.path.split(path) 将path分割成目录和文件名二元组返回
ret = os.path.split('E:\PythonProject\project')
print(ret) # ('E:\\PythonProject', 'project') 3、os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
ret1 = os.path.dirname('E:\PythonProject\project')
print(ret1) # E:\PythonProject 4、os.path.basename(path) 返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
ret2 = os.path.basename('E:\PythonProject\project')
print(ret2) # project 5、os.path.join(path1,path2...) 将多个路径组合后返回(一般还配合abspath使用规范化合并的路径)
ret = os.path.join('E:/PythonProject/project','t1.py')
print(ret) # E:/PythonProject/project\t1.py
ret = os.path.abspath(ret)
print(ret) # E:\PythonProject\project\t1.py 6、os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
res1 = os.path.exists('E:\PythonProject\project')
print(res1) # True res2 = os.path.exists('E:\project\PythonProject')
print(res2) # False 7、os.path.isabs(path) 如果path是绝对路径,返回True
ret = os.path.isabs('E:\PythonProject\project')
print(ret) # True 8、os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
ret = os.path.isfile('E:\PythonProject\project\python.py')
print(ret) # True 9、os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
ret = os.path.isdir('E:\PythonProject\project')
print(ret) # True 10、os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 **
ret = os.path.getatime('E:\PythonProject\project\\t1.py')
print(ret) # 1536049139.981451 11、os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 **
ret = os.path.getmtime('E:\PythonProject\project\\t1.py')
print(ret) # 1536049139.984452 12、os.path.getsize(path) 返回path(目录或者文件)的大小 *****
size = os.path.getsize('E:\PythonProject\project')
print(size) # size = os.path.getsize('E:\PythonProject\project\\t1.py')
print(size) # 第三部分:操作系统命令
1、os.system() # 以字符串的形式来执行操作系统的命令(跟exec类似 - 以字符串的形式来执行python代码)
os.system('dir') 2、os.popen()
ret = os.popen('dir') # 以字符串的形式来执行操作系统的命令(跟eval类似 - 以字符串的形式来执行python代码 且返回结果)
print(ret.read()) 第四部分:和python程序工作目录相关:
1、os.getcwd() 获取当前工作目录(get current working dir),即当前python脚本工作的目录路径
"""test.py所在路径为:D:\Projects\Test\TestPy36"""

# cd D:\Projects\Test\TestPy36
# python test.py
import os
import pathlib # 结果
print(os.getcwd()) # D:\Projects\Test\TestPy36
print(pathlib.Path.cwd()) # D:\Projects\Test\TestPy36 ################# # cd D:\Projects\Test
# python TestPy36\test.py
import os
import pathlib # 结果
print(os.getcwd()) # D:\Projects\Test
print(pathlib.Path.cwd()) # D:\Projects\Test
2、os.chdir()  改变当前脚本工作目录(change dir);相当于shell下的cd
os.chdir("E:\PythonProject\") 四、sys模块
一个模块能否被导入,就看这个模块所在的目录在不在sys.path路径中
内置模块和第三方扩展模块都不需要我们处理sys.path就可以直接使用
自定义的模块的导入工作需要自己手动的修改sys.path 1、sys.argv:打印出执行这个py文件的路径(列表形式显示)
但是:
如果当前文件包含在sys.path里面,那么sys.argv返回一个相对路径!
如果当前文件不包含在sys.path里面,那么sys.argv返回一个绝对路径!
# test.py文件
print(sys.argv)
print(sys.argv[0]) # 执行当前模块的路径,相当于__file__
sys.argv,1,2,3 # 执行后会打印出绝对路径和1,2,3组成的列表
# argv返回的是一个列表,__file__返回的是字符串 # 使用cmd进入命令提示符,执行test.py脚本
python test.py # 结果:[test.py]
python test.py 1 2 # 结果:[test.py, 1, 2]

2、sys.path:包含输入模块的目录名列表。(即存放了所有模块的路径的一个列表)
获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

也就是说,如果import一个模块,模块的路径必须包含在sys.path列表中,如果不存在,则不能导入,但是可以自定义模块路径:
sys.path.append(“自定义的模块路径”)


3、sys.modules :查看当前内存空间中所有的模块,和这个模块的内存空间(主要在反射的时候用)
sys.modules是一个储存着所有模块的全局字典,该字典是python启动后就加载在内存中,sys.modules具有字典所拥有的一切方法。(每个py文件都相当于一个模块)

print(sys.modules)          # 以字典的形式打印所有的模块:键(模块名):值(每个模块的名空间地址)

print(sys.modules[__name__]) # __name__是当前模块名(modules中的键),modules[__name__]就是当前模块的空间地址(modules中的值)

print(sys.modules['__main__']) # 若在当前文件下运行,__name__ == '__main__'

print(dir(sys.modules[__name__])) # 查看当前模块的所有变量和方法