导入模块:
1.time模块
现在很少用,一般都用datetime。
现在主要用两个功能,sleep()和time()
time.sleep() 睡眠,可以让程序暂停一会儿,可以控制程序执行的频率
import time
print("你好啊")
time.sleep(5) # 延迟...
print("我叫赛利亚")
while 1:
time.sleep(5)
print("对1号服务器检测. 看看状态")
time.time()得到的是时间戳 在计算机中描述一个时间点. 用数字来描述时间点
把时间作为数轴. 选择1970-1-1 0:0:0 作为原点,经过了多少秒
主要用途:计算时间差
import time
# 1670138547.5021243
print(time.time()) # 获取时间戳
t1 = time.time() # 开始时间
s = 0
for i in range(9999999):
s += i
print(s)
t2 = time.time() # 结束时间
print(t2 - t1) # 显示这部分程序花了多少秒
2.datetime模块
datetime.datetime处理的是年月日时分秒
必须要知道,如何获取系统时间,以及两种转化
import datetime
# from datatime import datetime # 需要掌握多一点
# from datatime import date # 掌握里面一个就够了
# 获取当前系统时间
print(datetime.datetime.now())
# 其他方式
print(datetime.datetime(2025, 3, 23, 13, 23, 15))
# 格式化时间(记住)
t = datetime.datetime.now()
s = t.strftime("%Y年%m月%d日 %H:%M:%S") # f即format,str是字符串,因此是将时间格式化为字符串
print(s)
d = input("请输入一个时间(yyyy-mm-dd HH:MM:SS):")
dd = datetime.datetime.strptime(d, "%Y-%m-%d %H:%M:%S") # p: parse,字符串转化为时间
print(dd)
print(type(dd))
# 两个时间也可以通过相减计算差值
# date只需要掌握如下即可
print(datetime.date.today()) # 直接拿到当前系统时间(年月日)
print(datetime.date.today().strftime("%Y年%m月%d日"))
3.random模块
import random
print(random.random()) # 得到一个随机小数. 取值范围(0,1)之间
print(random.uniform(5,9)) # 得到一个随机小数. 取值范围自定义,可用于抢红包
print(random.randint(1, 2)) # 随机整数 [m, n] m和n边界都是可以取到的
lst = ["樵夫", '张无忌', "张翠山", "张三丰", "张平"]
print(random.choice(lst)) # 从lst随机选一个
print(random.sample(lst, 3)) # 随机抽选n个数据
randint用的较多,如随机生成四位验证码。
此外还有摇骰子等功能。
4.os模块
文件夹的处理
命令的执行
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.system("bash command") 运行shell命令,直接显示
os.popen("bash command").read() 运行shell命令,获取执行结果
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.path
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
import os
os.makedirs("a/b/c") # 创建文件夹使用的功能,如果已存在则报错
os.removedirs("a/b/c") # 删除空目录, 目录不是空的会报错
os.mkdir("a/b/c") # 在a/b中创建c,前提是a/b已有
os.rmdir("a/b/c") # 在a/b中删除c,前提是a/b已有
names = os.listdir("a") # 列出a文件夹中所有的文件名,子文件夹不列出
print(names) # 结果也是个list
os.remove("a/2.txt") # 删除一个文件
open("a/1.txt", mode="w") # 创建文件
os.rename("a/1.txt", "a/哈哈哈.txt") # 文件重命名
print(os.getcwd()) # ./ 获取当前工作目录
os.chdir("./a") # 切换工作目录
# 调用命令
# os.system("dir") # 会出乱码 可以执行一条命令
r = os.popen("dir") # 不乱码, 可以执行一条命令
print(r.read()) # 查看popen()运行结果
路径相关:
print(os.path.exists("a/b/3.txt")) # 判断一个路径是否存在.可以是文件也可以是路径.
print(os.path.exists("a/b"))
print(os.path.isdir("a/b/3.txt")) # 判断是否是文件夹
print(os.path.isdir("a/b")) # 判断是否是文件夹
print(os.path.isdir("a/c")) # 判断是否是文件夹,如果不存在则返回false
print(os.path.isfile("a/b/3.txt")) # 是否是一个普通文件
print(os.path.isfile("a/b")) # 是否是一个普通文件
print(os.path.isfile("a/b/haha.txt")) # 是否是一个普通文件,如果不存在则返回false
print(os.path.abspath("a/b/3.txt")) # 返回绝对路径
print(os.path.split(os.path.abspath("a/b/3.txt"))) # 切割成文件夹和文件
print(os.path.dirname(os.path.abspath("a/b/3.txt"))) # 只切出来文件夹
print(os.path.basename(os.path.abspath("a/b/3.txt"))) # 只切出来文件
# 拼接路径
r = os.path.join("a/b", "c", "d.txt") # 自动使用文件系统分隔符来拼接,windows两种斜杠都认
print(r)
r1 = "a/b" + "/" +"c" +"/" + "d.txt"
print(r1)
# 获取文件大小
r = os.path.getsize("a/b/3.txt") # 单位是字节
print(r)
扩展: 遍历文件夹中的内容
def func(path, ceng):
# path = "a"
for name in os.listdir(path): # b
# 拼接路径
new_path = os.path.join(path, name) # a/b
if os.path.isdir(new_path):
print(ceng * "|----- ", name, sep="") #
# 如果是文件夹. 那么这个代码应该重新执行一次....
func(new_path, ceng + 1) # 递归. 也是循环....
else:
print(ceng * "|----- ", name, sep="")
func("a", 1)
创建文件的正确流程:
def create_file(path, gai):
# 先处理路径
dirname = os.path.dirname(path)
if not os.path.exists(dirname):
os.makedirs(dirname)
if os.path.exists(path):
if gai:
open(path, mode="w").close()
else:
return # 文件已经存在. 并且用户选择了不覆盖.
else:
open(path, mode="w").close() # 创建文件
create_file("张三丰/金花婆婆/呵呵.txt", False) # 不覆盖
另一种方法:
总结:
5.sys模块
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取Python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
示例:
import sys
while 1:
print(123)
sys.exit(0) # 程序退出,给0表示正常退出,给1表示异常退出,记录日志用
print(sys.version)
print(sys.platform) # win32 windows
print(sys.path) # python用来搜索模块的, python的环境变量.
# 我在C盘的新建文件夹下建了个xxx.py
sys.path.append("C:/新建文件夹")
import xxx # 导入该模块的时候. 会自动的去找sys.path,如果里面没有则需要通过sys.path.append()添加,不加则报错
xxx.func()
# sys.path = []
# import db
注意:sys.path:python在import模块的时候,解释器是根据sys.path中给出的路径进行查找的;它是随动的,根据运行的py文件进行动态变化。pycharm中自动自动帮我们加的路径,加入移动到linux服务器上运行则会失效,所以很多时候需要我们手动sys.path.append()添加。
sys.argv:运维常用,可以写成linux命令+参数的形式。
6.pickle和json序列化
pickle:直接把对象序列化(打散成字节)并存储到文件中
import pickle
arr = [11, 22, 33]
bs = pickle.dumps(arr) # 序列化
print(bs)