datetime模块、os模块、sys模块、json模块、作业
datetime模块
1.datetime(精确至时分秒)
1.获取当前时间
1.1 datetime.datetime.today()
print(datetime.datetime.today()) # 2022-07-15 14:47:04.848523
1.2 datetime.now()
print(datetime.datetime.now()) # 2022-07-15 14:53:16.566713
1.3 datetime.utcnow()
print(datetime.datetime.utcnow()) # 2022-07-15 06:53:53.183599
2.用指定日期时间:datetime(年,月,日,时,分,秒)
print(datetime.datetime(2022,7,15,14,53)) # 2022-07-15 14:53:00
3.获取的时间可以通过点的方式取出
res3 = datetime.datetime.now()
print(res3) # 2022-07-15 15:12:26.418364
print(res3.year) #2022
print(res3.weekday()) # 4
print(res3.isoweekday()) # 5
2.time(精确至年月日)
print(datetime.date.today()) # 2022-07-15
3.timedekta()
表示时间差 括号里面的参数可以填:days、seconds、microseconds、milliseconds、minutes、hours、weeks,没有的时间可以用来通过换算得来
res1 = datetime.timedelta(days=7)
res2 = datetime.datetime.now()
print(res1+res2) # 2022-07-22 15:05:40.827497
os模块
os模块只主要是跟当前程序所在的操作系统打交道
1.创建目录
mkdir() 创建单级目录
os.mkdir(r'aaa') # 括号里没有填写绝对路径的话,就在执行文件同层路径建立目录
os.mkdir(r'ddd\eee\fff') # 无法创建多级目录
makedirs() 创建多级目录,也可以创建单级目录
os.makedirs(r'bbb\ccc\ddd') # 创建多级目录
os.makedirs(r'eee') # 也可以创建单级目录
2.删除目录
rmdir()删除单级目录
单级目录下不能有其他数据,也不支持多级目录的删除
os.rmdir(r'aaa') # aaa删除成功
os.rmdir('bbb\ccc\ddd') # ddd删除成功
os.rmdir(r'fff') # fff文件下有其他数据,删除失败
removedirs()删除多级目录
有数据的目录也不能被删除,当进行多级删除时,是由内而外递归删除空目录,直到有数据的目录位置
os.removedirs(r'bbb') # 删除失败,bbb下有其他数据
os.removedirs(r'bbb\ccc\ddd') # bbb、ccc、ddd文件全被删除
3.listdir()
列举指定路径下的文件名称(文件、目录),打印出来的是列表
print(os.listdir()) # ['.idea', 'datetime模块.py', 'eee', 'fff', 'os模块.py', '练习']
print(os.listdir(r'D:\2期学习\pythonProject\20\练习')) # ['core', 'db']
4.rename()、remove()
对文件进行重命名、删除
os.rename('a.txt','b.txt')
os.rename('c.py','e.py')
os.remove('e.py')
os.remove('b.txt')
5.getcwd()、chdir()
获取当前工作路径(绝对路径)、切换路径
print(os.getcwd()) # D:\2期学习\pythonProject\20
os.chdir(r'..')
print(os.getcwd()) # D:\2期学习\pythonProject
6.与启动文件相关
path.abspath(file)
获取当前文件的绝对路径
print(os.path.abspath(__file__)) # D:\2期学习\pythonProject\20\os模块.py
path.dirname(file)
获取当前文件所在的目录路径
print(os.path.dirname(__file__)) # D:/2期学习/pythonProject/20
7.判断路径是否存在(文件、目录)
path.exists()
用于判断文件或目录是否存在
print(os.path.exists(r'eee')) # True
print(os.path.exists(r'aaa')) # False
print(os.path.exists('os模块.py')) # True
print(os.path.exists('aaaa.py')) # False
path.isdir()
只用于判断是否是目录(文件夹)
print(os.path.isdir(r'eee')) # True
print(os.path.isdir(r'os模块.py')) # False
path.isfile()
只用于判断是否是文件
print(os.path.isfile(r'eee')) # False
print(os.path.isfile(r'os模块.py')) # True
8.path.join()
拼接路径,涉及到路径的拼接,不要使用加号,使用os模块里面的join方法,他可以识别当前所在的操作系统并自动切换正确的分隔符
base_dir = os.path.dirname(__file__)
print(base_dir) # D:/2期学习/pythonProject/20
new_file = os.path.join(base_dir,r'eee.py')
print(new_file) # D:/2期学习/pythonProject/20\eee.py
9.path.getsize()
获取文件的大小,以字节问单位
print(os.path.getsize(r'a.txt')) # 10
sys模块
sys模块主要是与Python解释器打交道
1.path
返回模块的搜索路径
print(sys.path) # ['D:\\2期学习\\pythonProject\\20'.....]
2.version
获取python解释器的版本信息
print(sys.version) # 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
3.paltform
返回操作系统平台名称
print(sys.platform) # win32
4.sys.argv
命令行与程序进行交互
print(sys.argv) # ['D:/2期学习/pythonProject/20/sys模块.py']
res = sys.argv
print(res)
if len(res) == 3:
username = res[1]
userpwd = res[2]
if username == 'nana' and userpwd == '123':
print("可以执行该文件")
else:
print('用户名密码错误')
else:
print("请填写用户名和密码")
json模块
简介
1. json模块:也称序列化模块,它是不同程序语言之间数据交互必备的模块(类似于不同语言交流的翻译器)
2. json格式的数据应该是什么
数据基于网络传输的形式是二进制,在python中,只有字符串才可以调用encode()转换成二进制数据,所以json格式的数据属于字符串
3. json格式的数据特征
3.1 它是字符串类型
3.2 引号是标志性的双引号
{"name": "nana", "pwd": 123}
dumps()、loads()
dumps()是将其他数据类型转换成json格式字符串
loads()是将json格式字符串转换成对应的数据类型
import json
d1 = {'name':'nana','age':18}
res1 = json.dumps(d1)
print(res1,type(res1)) # {"name": "nana", "age": 18} <class 'str'>
res2 = json.loads(res1)
print(res2,type(res2)) # {'name': 'nana', 'age': 18} <class 'dict'>
dump()、load()
将其他数据类型以json格式字符串写入文件
将文件中json格式字符串读取出来并转换成对应的数据类型
d = {'name': 'nana', 'pwd': 123}
# 需求:将上述字典保存到文件中 并且将来读取出来之后还是字典
import json
with open(r'a.txt','w',encoding='utf8')as f1:
json.dump(d,f1) # {"name": "nana", "pwd": 123}
with open(r'a.txt','r',encoding='utf8')as f2:
print(json.load(f2)) # {'name': 'nana', 'pwd': 123}
练习
1.涉及到用户数据的存储 可以单用户单文件
import os
import json
base_dir = os.path.dirname(__file__)
new_base_dir = os.path.dirname(base_dir) # D:/2期学习/pythonProject/20/练习
new_dir = os.path.join(new_base_dir,'db')
print(new_dir) # D:/2期学习/pythonProject/20/练习\db
if not os.path.exists(new_dir):
os.mkdir(new_dir)
user_name = input("请输入你的名字:").strip()
user_list = os.listdir(new_dir)
if user_name not in user_list:
user_pwd = input("请输入你的密码").strip()
dict_user = {'name':user_name,'pwd':user_pwd,'money':100}
file_path = os.path.join(new_dir,'%s'%user_name)
print(file_path) # D:/2期学习/pythonProject/20/练习\db\ss
with open(file_path,'w',encoding='utf8')as f1:
json.dump(dict_user,f1)
作业
1.编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化
import sys
import os
res = sys.argv
base_dir = input("请输入一个绝对路径:>>>").strip()
choice_type = input("请输入指定的文件类型:>>>").strip()
list1 = os.listdir(base_dir)
count = 0
for i in list1:
if choice_type in i:
count += 1
print(count)
2.针对json实操 尝试单文件多用户(一行一个)是否可实现 哪个更方便
import json
user_name = input("请输入你的用户名>>>:").strip()
user_pwd = input("请输入你的密码").strip()
user_dict = {'name':user_name,'pwd':user_pwd}
with open(r'a.txt','a',encoding='utf8') as f:
res = json.dumps(user_dict)
res1 =res +'\n'
f.write(res1)
print(res1,type(res1))
with open(r'a.txt','r',encoding='utf8') as f1:
for line in f1:
res2 =json.loads(line)
ps:单个文件和多个文件都可以实现,单个用户在一个文件中,只需要将路径获取正确,剩下的没有什么容易犯错的步骤,并且之后好判断或登陆用户信息;多个用户在一个文件中,将文件内容一行行读取出来,才能进行判断或登陆用户信息,就很繁琐
3.编程小练习
有一个目录文件下面有一堆文本文件
eg:
db目录
J老师视频合集
R老师视频合集
C老师视频合集
B老师视频合集
文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
用户选择哪个文件就自动打开该文件并展示内容
涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径
import os
while True:
base_dir = os.path.dirname(__file__)
# print(base_dir) # D:/2期学习/pythonProject/20
db_path = os.path.join(base_dir,'db')
list1 = os.listdir(db_path)
# print(list1) # [' B老师视频合集.txt', 'C老师视频合集.txt', 'J老师视频合集.txt', 'R老师视频合集.txt']
dic_info ={}
for i,j in enumerate(list1,1):
print(i,j)
dic_info[str(i)]=j
# print(dic_info)
choice = input("请输入你想看那个老师的教学视频的编号>>>:").strip()
if choice in dic_info:
looking_txt = dic_info[choice]
new_file = os.path.join(db_path,looking_txt)
with open(new_file,'r',encoding='utf8') as f1:
print(f1.read())
else:
print("请重新输入")
浙公网安备 33010602011771号