今日内容概要
- 时间模块之datetime模块
- os模块
- sys模块
- json模块
时间模块之datetime模块
1.与time模块类似,都是与时间操作相关的模块
date ————年月日
datetime————年月日 时分秒
import datetime res = datetime.datetime.today() res1 = datetime.date.today() # 2022-07-15 print(res.year) print(res.month) print(res.weekday()) print(res.isoweekday()) ''' date 年月日 datetime 年月日 时分秒 ''' t1 = datetime.timedelta(days=3) print(res1 + t1) # 2022-07-18 print(res1 - t1) # 2022-07-12 ''' timedelta括号内有很多参数,没有的时间可以通过换算得来 ''' # 补充说明: print(datetime.datetime.now()) print(datetime.datetime.utcnow()) c = datetime.datetime(2017,5,23,12,20) print('指定日期:',c)
os模块
1:os模块主要是跟当前程序所在的操作系统打交道
2:os模块主要功能:
2.1:创建目录————mkdir只能创建单级目录;而makedirs既可以创建单级也可以创建多级!!!
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:删除目录————rmdir可以删除单级目录,但是此单词目录内不可有数据;removedirs可以删除多级目录,目录内有数据也不可删除,并且它还可以递归删除空目录。
os.rmdir(r'aaa') # 可以删除单级目录 os.rmdir(r'ccc') # 但是单级目录下不能有其他数据,也不支持多级目录的删除 os.removedirs(r'ccc') # 针对有数据的目录也无法删除 os.removedirs(r'bbb\ccc\ddd') # 由内而外递归删除空目录,直到有数据的目录为止
2.3:列举指定路径下的文件名称(文件,目录)
print(os.listdir()) # 结果是列表 ['.idea', '01 homework.py', '02 lianxi.py', 'a', 'a.txt', 'ag.log', 'bbb', 'db', 'log.log'] print(os.listdir(r'D:\\')) # ['a.txt']
2.4:重命名文件,删除文件
os.rename(r'a.txt',r'aaa.txt') # 重命名文件 os.remove(r'aaa.txt') # 删除文件
2.5:获取当前工作路径(所在的路径),绝对路径
print(os.getcwd()) # E:\pythonProject\Day24 os.chdir(r'..') print(os.getcwd()) # E:\pythonProject
2.6:与程序启动文件相关
print(os.path.abspath(__file__)) # 获取当前文件的绝对路径 print(os.path.dirname(__file__)) # 获取当前文件所在目录路径
2.7:判断路径是否存在(文件,目录)
print(os.path.exists(r'ATM')) # True print(os.path.exists(r'aaa')) # Flase print(os.path.exists(r'01 datetime模块.py')) # True print(os.path.exists(r'a.txt')) # False # isdir只用于路径是否是目录(文件夹) print(os.path.isdir()) print(os.path.isdir(r'ccc')) # True print(os.path.isdir(r'01 datetime模块.py')) # False # isfile只用于路径是否是文件 print(os.path.isfile()) print(os.path.isfile(r'ccc')) # False print(os.path.isfile(r'01 datetime模块.py')) # True
2.8:拼接路径
relatie_path = 'a.txt' '''拼接a.txt的绝对路径``` absolute_path = r'E:\pythonProject\Day24' res = os.path.join(absolute_path,relatie_path) print(res) # ps:join方法可以自动识别当前所在的操作系统并自动切换正确的分隔符#
2.9:获取文件大小
# 以字节为单位!!! print(os.path.getsize(r'a.py')) # 12 print(os.path.getsize(r'a.txt')) # 17
sys模块
1.sys模块主要是跟python解释器打交道
2.功能描述:
import sys print(sys.path) # 结果是列表 """ 'E:\\pythonProject\\Day24', 'E:\\pythonProject\\Day24', 'D:\\pycharm\\PyCharm 2020.3.5\\plugins\\python\\helpers\\pycharm_display', 'D:\\Python36\\python36.zip', 'D:\\Python36\\DLLs', 'D:\\Python36\\lib', 'D:\\Python36', 'D:\\Python36\\lib\\site-packages', 'D:\\pycharm\\PyCharm 2020.3.5\\plugins\\python\\helpers\\pycharm_matplotlib_backend'] """ print(sys.version) # 查看解释器信息 """ 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] """ print(sys.platform) # 查看当前平台 # win32 res = sys.argv print(res) # ['E:/pythonProject/Day24/02 lianxi.py']['E:/pythonProject/Day24/02 lianxi.py']
3.举个栗子:
补充知识
(1)在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称。
sys.argv[0] 表示程序自身
sys.argv[1] 表示程序的第一个参数
sys.argv[2] 表示程序的第二个参数
(2)需求:命令行执行当前文件必须要提供用户名和密码,否则不准执行if len(res) == 3: username = res[1] password = res[2] if username == 'jason' and password == '123': print('您可以正在执行该文件') else: print('用户名或密码错误') else: print('请填写用户名和密码 二者不可或缺')
json模块
1.json模块也称之为序列化模块
json模块是不同编程语言之间数据交互必备的模块(处理措施)
2.json格式的数据应该是什么?
数据基于网络传输肯定是二进制,那么在python中只有字符串可以调用encode方法转成二进制数据,所以json格式的数据也属于字符串。
3.json格式的数据特征:
肯定是字符串,其次引号是标志性的双引号
4.举个栗子:
需求:将字典保存的文件中,并且将来读取出来之后还是字典。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)) # dumps和loads d = {'name': 'jason', 'pwd': 123} 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'> # dump和load d = {'name': 'jason', 'pwd': 123} 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))
5.归纳总结
dumps() 将其他数据类型转换成json格式字符串
loads() 将json格式字符串转化成对应的数据类型dump() 将其他数据数据以json格式字符串写入文件
load() 将文件中json格式字符串读取出来并转换成对应的数据类型
作业展示
- 作业一:
“”"
1.编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化
“”"
import os
res = input('请输入你想获取的后缀名>>>:')
new_path = r'E:\pythonProject\Day24'
path = os.path.join(new_path,res)
print(path)
# print(os.listdir(new_path))
count = 0
for i in os.listdir(new_path):
if res in i:
count += 1
print(count)
- 作业二:
“”"
2.针对json实操 尝试单文件多用户(一行一个)是否可实现 哪个更方便
“”"
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)
# 由于文件中有多行,直接读取会出现错误,因此一行一行读取
file = open('db/jason', 'r', encoding='utf-8')
for line in file.readlines():
dic = json.loads(line)
while True:
username = input('username>>>:').strip()
password = input('password>>>:').strip()
user_dict = {'username': username,
'password': password,
}
if username == dic['username'] and password == dic['password']:
print('账户已存在')
continue
else:
with open(r'db/jason','a', encoding='utf8') as f:
json.dump(user_dict, f)
f.write('\n')
break
break
- 作业三:
“”"
3.编程小练习
有一个目录文件下面有一堆文本文件
eg:
db目录
J老师视频合集
R老师视频合集
C老师视频合集
B老师视频合集
文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
用户选择哪个文件就自动打开该文件并展示内容
涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径
“”"
import json
import os
base_dir = os.path.dirname(__file__)
now_path = 'bd'
file_path = os.path.join(base_dir,now_path)
res = os.listdir(file_path)
new_dict = {}
count = 1
for name in res: # 循环获取文件名
print(str(count) + name)
new_dict[count] = name
count += 1
choice = input('请输入想要获取的文件编号>>:').strip()
first = new_dict[int(choice)] # 获取输入编号
teacherB = os.path.join(file_path,first) # 拼接路径,打开对应文件
with open(teacherB, 'r', encoding='utf8') as f: # 读取文件(异常捕获)
try:
date1 = f.read()
print(date1)
except Exception:
date1 = json.load(f)
print(date1)