前言
py文件名尽量不要与模块名冲突(内置、第三方)
datetime模块
常见内置函数
# 与time模块相似,都是与时间操作相关的模块
import datetime
'datetime 年月日 时分秒'
res = datetime.datetime.today()
print(res)
print(res.year) # 2022
print(res.month) # 7
print(res.weekday()) # 4
print(res.isoweekday()) # 5
'date 年月入'
res1 = datetime.date.today()
print(res1)
'timedelta可以当作一个计时器'
tl = datetime.timedelta(days=2)
print(res1+tl) # 2022-07-17
print(res1-tl) # 2022-07-13
补充说明
print(datetime.datetime.now()) # 本地时间
print(datetime.datetime.utcnow()) # utc 协调世界时(世界标准时间)
c = datetime.datetime(2020,5,20,2,50)
print('指定日期:',c) # 指定日期: 2020-05-20 02:50:00
os模块
创建目录(文件夹)
os.mkdir(r'aaa') # 使用相对路径 在当前执行文件所在的目录下创建一个aaa文件 只能创建单级目录
os.makedirs(r'xxx/ccc') # makedirs可以创建多级目录,也可以创建单级目录
删除目录(文件夹)
os.rmdir(r'aaa')
os.removedirs('xxx/ccc') # 删除目录之后如果外层的目录也是空的则继续删除,可以删除单级目录
查看某个路径下所有的文件名称(文件、文件夹)
# print(os.listdir('./ccc')) # ['datetime模块.py', 'b.py']
# print(os.listdir()) # 默认为执行文件的目录路径
删除文件,重命名文件
os.remove(r'./ccc/b.py') # 删除文件
os.rename(r'./ccc/a.py',r'./ccc/b.py') # 重命名文件
获取当前路径、切换路径
print(os.getcwd()) # 获取当前路径
os.chdir(r'/Users/xunfei') # 切换到指定路径,括号内填写想要指定的路径
print(os.getcwd())
与程序启动文件相关
'__file__指的是当前执行文件'
print(os.path.dirname(__file__)) # 动态获取当前执行文件的所在的目录路径
print(os.path.dirname(os.path.dirname(__file__))) # 每嵌套一层就是往上切换一层
print(os.path.abspath(__file__)) # 动态获取当前执行文件自身的路径
判断文件是否存在
'判断目录或路径是否存在'
print(os.path.exists(r'./ccc/b.py')) # 判断所给的路径是否存在
print(os.path.isdir(r'ccc')) # 判断路径是否是一个文件夹
print(os.path.isdir(r'ccc/b.py')) # False
'判断文件是否存在'
print(os.path.isfile(r'ccc')) # False 判断路径是否是一个文件
print(os.path.isfile(r'ccc/b.py')) # True
拼接路径
base_dir= 'ccc'
exe_dir = 'b.py'
print(base_dir+'/'+exe_dir) # ccc/b.py # 路径分隔符在不同的系统下是不一样的,使用加号的化兼容性极差
res = os.path.join(base_dir,exe_dir) # 能够自动识别当前操作系统的分隔符
print(res)
获取文件大小(字节 bytes)
print(os.path.getsize(__file__))
sys模块
import sys
# print(sys.path) # 返回的是一个列表,值得是环境变量
# print(sys.version) # 查看解释器版本信息
# print(sys.platform) # 查看当前平台
"""
返回pycharm模拟的终端的 返回的是一个列表,能够捕获到我们在模拟的终端所输入的所有参数,我们可以通过他的返回值来模拟像mysql在终端的登录
"""
res = sys.argv
print(res)
if len(res) ==3:
username = res[1]
password = res[2]
if username == 'xunfei' and password=='123':
print('你正在执行该文件')
else:
print('用户名或密码错误')
else:
raise Exception('对不起,您输入错误')
json模块
json模块的定义
1.json是一个序列化模块,主要是用于跨语言传输数据
2.json模块是不同编程语言之间数据交互的必备模块(处理措施)
3.Json格式数据是什么
数据基于网络传输肯定是二进制,那么在python中只有字符串可以调用encode方法转成二进制数据,所以json格式的数据属于字符串
4.json的特点
首先肯定是字符串,其次引号是标志性的双引号
json的具体函数
d = {'name': 'jason', 'pwd': 123}
# 需求:将上述字典保存到文件中 并且将来读取出来之后还是字典
'错误演示:如下方法取出的是字符串'
with open(r'b.txt','w',encoding='utf8') as f:
f.write(str(d))
with open(r'b.txt','r',encoding='utf8') as f:
data = f.read()
print(data, type(data))
'用json就可以实现'
import json
res = json.dumps(d) # 序列化 将其他数据类型转换成json格式字符串
print(res, type(res))
{"name": "jason", "pwd": 123} <class 'str'>
d1 = {"name": "jason", "pwd": 123}
print(d1) # {'name': 'jason', 'pwd': 123}
res1 = json.loads(res) # 反序列化 将json格式字符串转换成对应编程语言中的数据类型
print(res1, type(res1)) # {'name': 'jason', 'pwd': 123} <class 'dict'>
import json
with open(r'b.txt','w',encoding='utf8') as f:
# f.write(json.dumps(d))
json.dump(d, f) # 直接让字典写入文件(json自动帮你完成转换)
with open(r'b.txt','r',encoding='utf8') as f:
# data = f.read()
# res = json.loads(data)
# print(res, type(res))
res = json.load(f)
print(res, type(res))
json的实战
# 涉及到用户数据的存储 可以单用户单文件
jason.json
kevin.json
oscar.json
import json
import os
base_dir = r'D:\pythonProject\day24\db'
username = input('username>>>:').strip()
username_list = os.listdir(base_dir)
if username in username_list:
file_path = os.path.join(base_dir,username)
with open(file_path, 'r', encoding='utf8') as f:
data = json.load(f)
print(data, type(data))
print(os.listdir(r'D:\pythonProject\day24\db'))
base_dir = os.path.dirname(__file__)
db_path = os.path.join(base_dir,'db')
if not os.path.exists(db_path):
os.mkdir(db_path)
username = input('username>>>:').strip()
password = input('password>>>:').strip()
user_dict = {'username': username,
'password': password,
'balance': 15000,
'shop_car':[]
}
file_path = os.path.join(db_path, '%s'%username)
with open(file_path,'w',encoding='utf8') as f:
json.dump(user_dict, f)
hashlib模块
random模块