小白学python系列————【Day31】os模块和json模块

今日内容概要

  • 时间模块之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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值