DAY 16 模块与包( 包 json模块 os模块)
模块与包
模块与包的关系
- 函数 → 文件(模块) → 文件夹(包/模块)
- 导入顺序:内存-->内置-->环境变量
- 包是特殊的模块,本质是包含__init__.py的文件夹
- 包也是模块的一种
包导入机制的优势
- 1.保持模块导入方式不变,即使内部结构调整
- 2.简化模块开发者的管理复杂度
- 3.便于组织大型代码库
example
my_package/
│── __init__.py
│── module1.py
│── module2.py
└── subpackage/
│── __init__.py
│── module3.py
绝对导入示例
# 在另一个文件中导入
import my_package.module1
from my_package import module2
from my_package.subpackage import module3
相对导入
- 使用.表示路径,相对于文件自身而非执行文件定位
- 前面必须是包,不能是模块
-- . 当前目录
-- .. 上一级目录
-- ... 上上级目录
# 在module3.py中导入同级的module1
from .. import module1
# 在module1.py中导入子包中的module3
from .subpackage import module3
json模块
写入json文件
import json
data = {
"name": "张三",
"age": 25,
"courses": ["数学", "英语", "编程"]
}
# 写入文件
with open('data.json', 'w', encoding='utf-8') as fr
:
json.dump(data, f, ensure_ascii=False, indent=4)#json.dump(obj,fr,...)把对象存入文件中 indent=4:指定缩进空格数,使 JSON 文件格式化(美观易读) ensure_ascii=False:直接输出原始字符,保证可读性。
读取json文件
import json
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)#把文件读成字典
print(loaded_data["name"]) # 输出: 张三
os模块示例
目录操作
import os
# 创建目录
os.makedirs('my_folder/sub_folder', exist_ok=True)
# 列出目录内容
print(os.listdir('.'))
# 路径拼接
file_path = os.path.join('my_folder', 'sub_folder', 'file.txt')
# 检查路径是否存在
print(os.path.exists(file_path)) # False
# 创建文件
with open(file_path, 'w') as f:
f.write('Hello')
# 重命名文件
os.rename(file_path, os.path.join('my_folder', 'sub_folder', 'renamed.txt'))
# 删除文件
os.remove(os.path.join('my_folder', 'sub_folder', 'renamed.txt'))
补充
if __name__ == '__main__':
作用:
- 直接运行 python module.py 会执行 test() 并打印信息
- 在其他文件中 import module 时,只会打印导入信息,不会执行 test()
def hello():
print("Hello from module!")
def test():
print("This is a test function")
if __name__ == '__main__':
# 这部分代码只有在直接运行该文件时才会执行
test()
print("This file is being run directly")
else:
print("This file is being imported as a module")