目录
本章内容概要
- 时间模块之datetime模块
- os模块
- sys模块
- json模块
- 作业
今日内容详解
1. 时间模块之datetime模块
1.1 与time模块类似 都是时间操作相关的模块
- date 年月日 datetime 年月日 时分秒
import datetime
res = datetime.datetime.today()
res1 = datetime.date.today()
print(res) # 2022-07-15 15:08:04.912520
print(res1) # 2022-07-15
print(res.year) # 2022
print(res.month) # 7
print(res.weekday()) # 4
print(res.isoweekday()) # 5
2. timedelta括号内有很多参数 没有的时间可以通过换算得来
import datetime
res1 = datetime.date.today()
t1 = datetime.timedelta(days=4)
print(res1 + t1) # 2022-07-19
print(res1 - t1) # 2022-07-11
3. 指定时间
import datetime
print(datetime.datetime.now()) # 2022-07-15 15:21:17.986353(获取当前时间)
print(datetime.datetime.utcnow()) # 2022-07-15 07:21:17.986353(获取当前格林威治时间)
c = datetime.datetime(2020, 5, 12, 12, 12)
print('指定日期:',c) # 指定日期: 2020-05-12 12:12:00
2. os模块
2.1. 创建目录
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.2. 删除目录
import os
# os.rmdir(r'aaa') # 可以删除单极目录
# os.rmdir(r'ccc') # 但是单级目录下能有其他数据,也不支持多级目录的删除
# os.removedirs(r'ccc') # 针对有数据的目录也无法删除
os.removedirs(r'bbb/ccc/ddd') # 由内而外递归删除空目录 直到有数据的目录为止
2.3. 列举指定路径下的文件名称(文件、目录)
import os
print(os.listdir()) #结果列表 ['.idea', '01 时间模块之 datetime.py', '02 os模块.py']
print(os.listdir(r'D://')) # ['$RECYCLE.BIN', '.temp', '1.txt', ...... 'zlib1.dll', '作业']
2.4. 重命名文件 删除文件
import os
os.rename(r'a.txt',r'aaa.txt')
import os
os.remove(r'aaa.txt')
2.5. 获取当前工作路径(所在的路径) 绝对路径
import os
# print(os.getcwd()) # G:/pythonProject/day24
# os.chdir(r'..')
os.mkdir(r'zzzzz')
print(os.getcwd())
2.6. 与程序启动文件相关
import os
print(os.path.abspath(__file__)) # 获取当前文件的绝对路径 G:/pythonProject/day24/02 os模块.py
print(os.path.dirname(__file__)) # 获取当前文件所在的目录路径 G:/pythonProject/day24
2.7. 判断路径是否存在(文件、目录)
isdir只用于路径是否是目录,isfile只用于路径是否是文件
import os
# print(os.path.exists(r'AA')) # False 很多程序一般情况下默认都忽略大小写 如果为AAA返回是Ture
# print(os.path.exists('02 os模块.py')) # True
# print(os.path.isdir(r'aaa')) # isdir只用于路径是否是目录(文件夹)
# print(os.path.isdir('02 os模块.py')) # False
# print(os.path.isfile()) # isfile只用于路径是否是文件
print(os.path.isfile(r'ccc')) # False
print(os.path.isfile(r'02 os模块.py')) # True
2.8. 拼接路径
- 加号(+)拼接
relative_path = 'a.txt'
absolute_path = r'G:/pythonProject/day24/aaa'
# 拼接a.txt的绝对路径
print(absolute_path + relative_path)
2. join方法:涉及到路径拼接,不要使用加号,建议使用os模块的里面join方法,join方法可以自动识别当前所在的操作系统并自动切换正确的分隔符 windows用/ mac用/
import os
relative_path = 'a.txt'
absolute_path = r'G:/pythonProject/day24/aaa'
res = os.path.join(absolute_path, relative_path)
print(res)
2.9. 获取文件大小 bytes
import os
print(os.path.getsize(r'02 os模块.py')) # 5357
print(os.path.getsize(r'a.txt')) # 5
3. sys模块
3.1 sys模块主要是跟python解释器打交道
import sys
print(sys.path) # 结果列表 ['G://pythonProject//day24', 'G://pythonProject//day24', 'G://PyCharm 2021.1.3//plugins//python//helpers//pycharm_display', 'G://Python38//python38.zip', 'G://Python38//DLLs', 'G://Python38//lib', 'G://Python38', 'G://Python38//lib//site-packages', 'G://PyCharm 2021.1.3//plugins//python//helpers//pycharm_matplotlib_backend']
print(sys.version) # 查看解释器信息 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]
print(sys.platform) # 查看当前平台 win32
3.2 代码举例
import sys
res = sys.argv
print(res)
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('请填写用户名和密码 二者不可或缺')
4. json模块
4.1 json模块简介
- json模块也称之为序列化模块
- json模块是不同编程语言之间数据交互必备的模块(处理措施)
4.2 json格式数据
- 数据基于网络传输肯定是二进制 那么在python中只有字符串可以调用encode方法转成二进制数据 所以json格式的数据也属于字符串
- json格式的数据有一个非常明显的特征,首先肯定是字符串 其次引号是标志性的双引号
4.3 json方法名字
- dumps() 将其他数据类型转换成json格式字符串
- loads() 将json格式字符串转化成对应的数据类型
import json
d = {'name': 'jason', 'pwd': 123, 'age': 2}
# 需求:将上述字典保存到文件中 并且将来读取出来之后还是字典d = {'name': 'jason', 'pwd': 123}
res = json.dumps(d)
print(res, type(res)) # 序列化,将其他数据类型转换成json格式字符串
# {"name": "jason", "pwd": 123, "age": 2} <class 'str'>
res1 = json.loads(res)
print(res1, type(res1)) # 反序列化,将json格式字符串转换成对应编程语言中的数据类型
# {'name': 'jason', 'pwd': 123, 'age': 2} <class 'dict'>
3. dump() 将其他数据数据以json格式字符串写入文件
4. load() 将文件中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, 'age': 2} <class 'dict'>
4.4 json模块实参
1.涉及到用户数据的存储 可以单用户单文件
jason.json
kevin.json
oscar.json
import json
username = input('username>>>:').strip()
password = input('password>>>:').strip()
user_dict = {'username': username,
'password': password,
'balance': 15000,
'shop_car':[]
}
with open(r'%s.json'%username,'w',encoding='utf8') as f:
json.dump(user_dict, f)
import json
import os
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)
import json
import os
base_dir = r'G:/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))
5.作业
5.1 编写一个统计指定文件类型的脚本工具输入指定类型的文件后缀 eg:.txt,并给出一个具体路径 之后统计该类型文件在该文件下的个数。
appoint_path = input('请输入文件指定路径:').strip()
path_suffix = input('请输入你统计的文件类型后缀:').strip()
count = 0
path_user = os.listdir(appoint_path)
print(path_user)
for file_name in path_user:
if file_name.endswith(r'%s' % path_suffix):
count += 1
print(f'{path_suffix}为后缀的文件个数为{count}')
5.2 针对json实操 尝试单文件多用户(一行一个)是否可实现 哪个更方便
import json
username = input('username>>:').strip()
password = input('password>>:').strip()
user_data = {username:password}
res = json.dumps(user_data)
with open(r'user_data.txt','a',encoding='utf8') as f:
with open(r'user_data.txt', 'r', encoding='utf8') as f1:
if res not in f1:
f.write(res)
f.write('/n')
5.3 有一个目录文件下面有一堆文本文件
eg:
db目录
J老师视频合集
R老师视频合集
C老师视频合集
B老师视频合集
文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
用户选择哪个文件就自动打开该文件并展示内容
涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径
原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/275015.html