文章目录
昨日内容回顾
模块的绝对导入和相对导入
绝对导入(推荐)
在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版权协议,转载请附上原文出处链接和本声明。