python学习笔记
今日内容概要
- 时间模块之datetime模块
- os模块
- sys模块
- json模块
- json模块的实操
今日内容详细
注意:py文件名称尽量不要与模块名冲突(内置,第三方)
datetime模块
- 与time模块相似,都是与时间操作相关的模块
功能说明 | |
---|---|
datetime.data | 日期对象,常用的属性有year,month,day |
datetime.time | 时间对象,常用的属性有hour, minute, second |
datetime.datetime | 日期时间对象,常用的属性有year,month,day,hour, minute, second |
datetime.timedelta | 表示时间间隔,即两个时间点的间隔,主要用于做时间加减的 |
import datetime
1.date
res = datetime.date.today()
print(res) # 2022-07-15
2.time
res1 = datetime.time(15, 18, 35)
print(res1) # 15:18:35
3.datetime
res2 = datetime.datetime.today()
print(res2) # 2022-07-15 15:20:12.535612
4.timedelta
tl = datetime.timedelta(days=3)
print(res + tl) # 2022-07-18
print(res - tl) # 2022-07-12
"""
timedelta括号内有很多参数 没有的时间可以通过换算得来
"""
补充知识:
print(datetime.datetime.now()) # 2022-07-15 15:25:11.200701
print(datetime.datetime.utcnow()) # 2022-07-15 07:25:11.200701
c = datetime.datetime(2022, 7, 15, 15, 25)
print('指定日期:', c) # 指定日期: 2022-07-15 15:25:00
os模块
- os模块主要是跟当前程序所在的操作系统打交道
功能说明 | |
---|---|
os.mkdir('dirname') | 生成单级目录 |
os.makedirs('dirname1/dirname2') | 生成多级目录,也可生成单级目录 |
os.rmdir('dirname') | 可以删除单级目录,但是目录下不能有其他数据,也不支持多级目录删除 |
os.removedirs('dirname') | 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 |
os.listdir('dirname') | 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 |
os.rename("oldname","newname") | 重命名文件目录 |
os.remove() | 删除一个文件 |
os.getcwd() | 获取当前工作目录,即当前python脚本工作的目录路径 |
os.chdir("dirname") | 改变当前脚本工作目录 |
os.path.dirname(__ file__) | 获取当前文件所在的目录路径 |
os.path.exists(path) | 如果path存在,返回True;如果path不存在,返回False |
os.path.isdir(path) | 如果path是一个存在的目录,则返回True, 否则返回False |
os.path.isfile(path) | 如果path是一个存在的文件,返回True, 否则返回False |
os.path.join() | 拼接路径 |
os.path.getsize() | 获取文件大小(bytes) |
import os
relative_path = 'a.txt'
'''拼接a.txt的绝对路径'''
absolute_path = r'D:\pythonProject\day24\ccc\ddd\eee'
print(absolute_path + relative_path)
"""涉及到路径拼接 不要使用加号 建议使用os模块的里面join方法"""
res = os.path.join(absolute_path, relative_path)
print(res)
# ps:join方法可以自动识别当前所在的操作系统并自动切换正确的分隔符 windows用\ mac用/
- 输出结果:
import os
#1.创建目录
os.mkdir(r'aaa') # 创建单级目录
os.mkdir(r'bbb\ccc\ddd') # mkdir无法创建多级目录
os.makedirs(r'bbb\ccc\ddd') # makedirs可以创建多级目录
os.makedirs(r'ccc') # makedirs也可以创建单级目录
#2.删除目录
os.rmdir(r'aaa') # 可以删除单级目录
os.rmdir(r'ccc') # 但是单级目录下不能有其他数据 也不支持多级目录的删除
os.removedirs(r'ccc') # 针对有数据的目录也无法删除
os.removedirs(r'bbb\ccc\ddd') # 由内而外递归删除空目录 直到有数据的目录为止
#3.列举指定路径下的文件名称(文件、目录)
print(os.listdir()) # 结果是列表 ['.idea', '01 datetime模块.py', '02 os模块.py', 'ccc']
print(os.listdir(r'D:\\'))
#4.重命名文件 删除文件
os.rename(r'a.txt', r'aaa.txt')
os.remove(r'aaa.txt')
#5.获取当前工作路径(所在的路径) 绝对路径
print(os.getcwd()) # D:\pythonProject\day24
os.chdir(r'..')
os.mkdir(r'heiheihei')
print(os.getcwd())
#6.与程序启动文件相关
print(os.path.abspath(__file__)) # 获取当前文件的绝对路径(可以不记)
print(os.path.dirname(__file__)) # 获取当前文件所在的目录路径(必须得记)
#7.判断路径是否存在(文件、目录)
print(os.path.exists(r'ATM')) # True
print(os.path.exists(r'aaa')) # False
print(os.path.exists(r'01 datetime模块.py')) # True
print(os.path.exists(r'a.txt')) # False
print(os.path.isdir()) # isdir只用于路径是否是目录(文件夹)
print(os.path.isdir(r'ccc')) # True
print(os.path.isdir(r'01 datetime模块.py')) # False
print(os.path.isfile()) # isfile只用于路径是否是文件
print(os.path.isfile(r'ccc')) # False
print(os.path.isfile(r'01 datetime模块.py')) # True
# 8.获取文件大小 bytes
print(os.path.getsize(r'02 os模块.py')) # 2363
print(os.path.getsize(r'a.txt')) # 17
sys模块
- sys模块主要是跟python解释器打交道
功能名称 | |
---|---|
sys.argv | 命令行参数List,第一个元素是程序本身路径 |
sys.path | 返回模块的搜索路径, 结果是列表 |
sys.version | 获取Python解释程序的版本信息 |
sys.platform | 返回操作系统平台名称 |
sys.exit(n) | 退出程序,正常退出时exit(0),错误退出sys.exit(1) |
import sys
print(sys.path)
print(sys.version)
print(sys.platform)
print(sys.argv)
- 输出结果:
- sys.argv实操
'''需求:命令执行当前文件必须要提供用户名和密码,否则不准执行'''
import sys
res = sys.argv
if len(res) == 3:
username = res[1]
password = res[2]
if username == 'jason' and password == '123':
print('可以执行')
else:
print('用户名或密码错误')
else:
print('请填写用户名和密码')
- 需要用cmd执行查看结果:
json模块
1.简介
json模块也称之为序列化模块
什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化
2.作用
json模块是不同编程语言之间数据交互必备的模块(处理措施)
3.json格式的数据
数据基于网络传输肯定是二进制,那么在python中只有字符串可以调用encode方法转成二进制数据,所以json格式的数据也属于字符串
json格式的数据有一个非常明显的特征:首先肯定是字符串,其次是标志性的双引号
功能说明 | |
---|---|
json.dump() | 将其他数据以json格式字符串写入文件 |
json.load() | 将文件中json格式字符串读取出来并转换成对应的数据类型 |
json.dumps() | 将其他数据类型转换成json格式字符串 |
json.loads() | 将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)) # {'name': 'jason', 'pwd': 123} <class 'str'>
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)) # {'name': 'jason', 'pwd': 123} <class 'dict'>
json模块的实参
import json
import os
# 拿到用户的字典数据
base_dir = os.path.dirname(__file__) # 2.先获取当前根目录
db_path = os.path.join(base_dir, 'db') # 3.获取db文件夹的完整路径
username = input('username:').strip() # 1.获取用户名
username_list = os.listdir(db_path) # 4.列出db文件夹下面的文件
if username in username_list: # 5.判断获取的用户名在不在db文件夹下面
file_path = os.path.join(db_path, username) # 6.拼接db文件夹下面的文件得的绝对路径
with open(file_path, 'r', encoding='utf8') as f:
data = json.load(f) # 7.得到用户的字典数据
print(data)
# 涉及到用户数据的存储 可以单用户单文件
# 4.创建一个存储数据的文件夹首先判断它存不存在当前根目录下
base_dir = os.path.dirname(__file__) # 5.先获取当前根目录
db_path = os.path.join(base_dir, 'db') #6.获取存储数据文件夹的完整路径
if not os.path.exists(db_path): #7.判断它存不存在当前根目录下
os.mkdir(db_path) #8.创建储数据文件夹
username = input('username:').strip()
password = input('password:').strip() # 1.获取用户名密码
user_dict = {'username': username,
'password': password,
'balance': 15000,
'shop_car': []
} # 2.创建用户数据字典
file_path = os.path.join(db_path, '%s'%username) #9.拼接一个真正的路径
with open(file_path, 'w', encoding='utf8') as f:
json.dump(user_dict, f) # 3.将用户数据写入一个单独的文件
补充知识:
下面的校验也可以使用异常捕获实现
'''需求 命令行执行当前文件必须要提供用户名和密码 否则不准执行'''
import sys
try:
res = sys.argv
username = res[1]
password = res[2]
except Exception as e:
print('请填写用户名和密码')
else:
if username == 'jason' and password == '123':
print('可以执行')
else:
print('用户名或密码错误')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了