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")
posted @ 2025-08-21 20:09  CHENHANG123  阅读(8)  评论(0)    收藏  举报