「Python」时间模块之datetime模块 os模块 sys模块 jason模块

昨日内容回顾

模块的绝对导入和相对导入

绝对导入(推荐)

在pycharm环境下
以当前执行文件所在的sys.path为起始路径导入模块
若不在pycharm环境下运行 则需要将项目根目录添加至sys.path 也可以借助os模块
所有涉及模块的导入sys.path都参照执行文件为准

相对导入

只能在模块文件中使用 不能在执行文件中使用
当项目比较复杂的时候 相对导入比较容易出错

符号功能
.当前文件路径
双点上级文件路径
双点/双点上上级文件路径

包的概念

什么是包:一个含有__init__.py文件的文件夹就是包
为什么有包:为了更方便高效地挂历py(模块)文件
如何使用

1.创建python package
2.内部放有多个同类型的模块
3. import python package # 导入的是包内__init__.py文件
4. 在__init__.py文件内用相对导入的方式导入包内的模块 #通过__init__.py提前准备好模块,方便执行文件导入

编程思想的转变

小白阶段>>>函数阶段>>>模块阶段
单文件>>>多文件
一切都是为了能高效便捷地进行资源管理

软件开发目录规范

文件夹作用文件
bin储存程序启动文件start.py
conf(configuration)储存程序配置文件settings.py
core储存程序核心逻辑src.py(source)
lib储存程序公共功能common.py
db(database)储存程序数据文件userinfo.txt
log储存程序日志文件log.log
interface储存程序接口文件user.py order.py goods.py
\程序的说明介绍广告说明书readme.txt
\储存程序所需的第三方模块名称及版本requirements.txt

常见模块

collections模块

给我们提供了更多的数据类型

namedtuple 命名元组
deque 双端队列
OrderedDict 有序字典
Counter 计数器

time模块

提供了很多时间的操作

time() 获取时间戳
localtime() 获取结构化时间
gmtime() 获取英国伦敦的结构化时间
strftime() 根据某舟格式来格式化时间
sleep() 程序在原地等待自定义的时间

时间的格式

import time

res = time.strftime('%Y-%m-%d %H:%M:%S')
print(res)  # 2022-07-15 20:25:05

res = time.strftime('%Y-%m-%d %X')
print(res)  # 2022-07-15 20:25:05

%Y 获取年份
%m 获取月份
%d 获取天份
%H 获取小时
%M 获取分钟
%S 获取秒数
%X 获取时分秒

py文件取名时尽量不要与内置或者第三方模块重名

今日内容详细

datetime模块

import datetime

res = datetime.datetime.today()
print(res)  # # 2022-07-16 17:09:36.377280
res1 = datetime.date.today()
print(res1)  # 2022-07-16
"""
date        年月日
datetime    年月日 时分秒
"""

print(res.year)  # 2022
print(res.month)  # 7
print(res.day)  # 16
print(res.hour)  # 17
print(res.minute)  # 16
print(res.second)  # 0
print(res.weekday())  # 5
print(res.isoweekday())  # 6
"""
year    年
moth    月
day     日
hour    时
minute  分
second  秒
weekday()   周几  周一为0
isoweekday()周几  周一为1
"""

# timedelta 日期延期/提前
res = datetime.date.today()
tl = datetime.timedelta(days=3)
print(res)  # 2022-07-16
print(res + tl)  # 2022-07-19
print(res - tl)  # 2022-07-13
"""
timedelta括号内有很多参数 没有的时间可以通过换算得来
""" 

os模块(重要)

# 导入
import os
import os
# 创建目录  mkdir()  makedirs()
os.mkdir(r'aaa')  # 创建单级文件 但不能创建多级文件 但mkdir该语句在很多系统都通用
os.makedirs(r'aaa\bbb\ccc')  # 创建多级文件 也可以创建单级文件
import os
# 删除目录  rmdir() removedirs()
os.rmdir(r'aaa')  # 删除单级文件 但文件内不能有数据 不能删除多级文件

os.removedirs(r'aaa\bbb\ccc')  # 可以删除多级文件 
# 但若文件内有数据则无法删除 从内到外依次删除空的文件夹 直到遇到有数据的文件夹
import os
# 列举指定文件下的文件名称 listdir()  结果返回的是列表
# aaa文件夹中有 a.py b.py c.py
res = os.listdir(r'aaa')
print(res)  # ['a.py', 'b.py', 'c.py']
import os
# 重命名文件 rename() 删除文件 remove()
os.rename('a.txt', r'aaa.txt')  # 将a.txt更改为aaa.txt
os.remove('aaa.txt')  # 删除aaa.txt
import os
# 获取当前工作路径  getcwd()  获取的是绝对路径
print(os.getcwd())  # F:\pythonProject\day24
os.chdir(r'..')  # chdir() 类似 控制台中的cd
print(os.getcwd())  # F:\pythonProject
import os
# 与程序启动文件相关
print(os.path.abspath(__file__))  # 获取当前文件的绝对路径(可以不记)
print(os.path.dirname(__file__))  # 获取当前文件所在的目录路径(必须得记)
import os
# 判断路径是否存在(文件、目录)  exists()  isdir()  isfile()
# exists() 就像 isdir() 和 isfile() 功能的结合版
# isdir() 只能判断路径是否是目录(既文件夹)
# isfile() 只能判断路径是否是文件
# exists() 可以判断路径是否存在
import os
# 拼接路径  join()
relative_path = 'a.txt'
absolute_path = r'D:\pythonProject\day24\ccc\ddd\eee'
res = os.path.join(absolute_path, relative_path)  # 两个路径之间会根据当前系统自动添加\或/(不同系统之间路径的分隔符不同)
print(res)  # D:\pythonProject\day24\ccc\ddd\eee\a.txt
import os
# 获取文件大小 getize()
# a.txt 的内容如下
# 你好aaaa
print(os.path.getsize(r'a.txt'))  # 10  计算的是字节量  1个中文3字节 1个英文1个字节 所以是10字节

sys模块

import sys

print(sys.path)  # 结果是列表
print(sys.version)  # 查看解释器版本信息
print(sys.platform)  # 查看当前平台
res = sys.argv
"""需求 命令行执行当前文件必须提供用户名和密码 否则不准执行"""
if len(res) == 3:
    username = res[1]
    password = res[2]
    if username == 'jason' and password == '123':
        print('您可以正常执行该文件')
    else:
        print('用户名或密码错误')
else:
    print('请填写用户名和密码')
# 上述校验也可以使用异常捕获实现(课下实现)

res = sys.argv
try:
    username = res[1]
    password = res[2]
    if username == 'jason' and password == '123':
        print('您可以正常执行该文件')
    else:
        print('用户名或密码错误')
except IndexError:
    print('请输入用户名和密码')

json模块(重要)

import json

res = json.dumps(d)  # 序列化 将其他数据类型转换成json格式字符串
print(res, type(res))  # {"name": "jason", "pwd": 123} <class 'str'>
res1 = json.loads(res)  # 反序列化 将json格式字符串转换成对应编程语言中的数据类型
print(res1, type(res1))  # {'name': 'jason', 'pwd': 123} <class 'dict'>


"""
dumps()     将其他数据类型转换为json格式字符串
loads()     将json格式字符串转换成对应的数据类型

dump()      将其他数据类型直接以json格式字符串写入文件
load()      将文件中json格式字符串读取出来并转换成对应的数据类型
"""

版权声明:本文为Johnathan99999原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。