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

复制代码
摘要:时间模块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):
fmt = time.strftime('%Y-%m-%d %H:%M:%S') # 年月日时分秒 fmt1
= time.strftime('%H:%M:%S') # 时分秒(全大写) fmt2 = time.strftime('%Y-%m-%d') # 年月日(年可大写可小写,月日小写) fmt3 = time.strftime('%y-%m-%d') # 年月日 fmt4 = time.strftime('%c') # 本地相应的日期表示和时间表示
print(fmt) # 2018-09-04 16:49:03 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、几种时间格式间的转换
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()函数

 结果:

复制代码
import os


for root, dirs, files in os.walk("/dir"):
    print(root, dirs, files)

"""
/dir              [dir1, dir2]      [file1, file2]
/dir/dir1         [dir3, dir4]      [file3]
/dir/dir1/dir3    []                [file5]
/dir/dir1/dir4    []                []
/dir/dir2         []                [file4]
"""
复制代码

 

第二部分:路径相关
# __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) # 8192 size = os.path.getsize('E:\PythonProject\project\\t1.py') print(size) # 4156 第三部分:操作系统命令 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文件
import sys
print
(sys.argv) # 打印出一个列表,包含脚本的路径和参数
print(sys.argv[0]) # 执行当前模块的路径,相当于__file__
print(sys.argv[1]) # 脚本的第一个参数

# 使用cmd进入命令提示符,执行test.py脚本
python test.py 1
# 结果
["Test\test.py", 1]
Test\test.py
1

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__])) # 查看当前模块的所有变量和方法

 
复制代码

 

posted @   我用python写Bug  阅读(402)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示