Python 文件操作与包管理完全指南
📢 大家好!今天我们来学习 Python 中非常重要的两个核心技能:文件操作和包管理。文件操作让我们的程序能够持久化存储数据,而包管理则帮助我们更好地组织和复用代码。这篇文章将带你从零开始,全面掌握这些知识点。
📚 目录
一、文件操作概述
二、文件的基本操作
三、文件读写详解
四、文件备份案例
五、OS模块实现文件操作
六、Python模块
七、Python包
八、总结
一、文件操作概述
1.1 什么是文件
文件,在计算机领域,可以通俗地理解为存储在电脑硬盘、U盘等存储设备上的一组数据的集合。
为了让你更好理解,可以把它想象成现实生活中的一个档案袋或文档。
内存中存放的数据在计算机关机后就会消失 要长久保存数据,就要使用硬盘、光盘、U盘等设备 为了便于数据的管理和检索,引入了"文件"的概念
1.2 为什么需要文件操作
程序运行时的数据默认存在内存里,内存断电数据就消失
文件保存在硬盘,可以长久保存数据
文件操作让程序下一次执行时可以直接使用之前保存的数据,而不必重新制作
1.3 文件操作包含哪些内容
在日常生活中,文件操作主要包括:打开、关闭、读、写、追加等操作。
# 文件操作三步走 # ① 打开文件 → ② 读写文件 → ③ 关闭文件
二、文件的基本操作
2.1open()打开函数
在 Python 中,使用open函数可以打开一个已经存在的文件,或者创建一个新文件。
open(name, mode, encoding=code)
| 参数 | 说明 |
|---|---|
name | 要打开的目标文件的路径(字符串) |
mode | 设置打开文件的模式(访问模式) |
encoding | 文件的编码格式:gbk、utf8(字符串) |
2.2 文件访问模式详解
| 模式 | 说明 | 文件不存在 | 指针位置 |
|---|---|---|---|
r | 只读 | ❌ 报错 | 开头 |
w | 写入 | ✅ 创建 | 开头(清空) |
r+ | 读写 | ❌ 报错 | 开头 |
w+ | 读写(覆盖) | ✅ 创建 | 开头(清空) |
a | 追加写入 | ✅ 创建 | 末尾 |
a+ | 读写(追加) | ✅ 创建 | 末尾 |
# 以只读方式打开文件 f = open('python.py', 'r', encoding='utf8')2.3close()关闭函数
# 打开文件 f = open('python.txt', 'w', encoding='utf8') # 文件写入 f.write('hello world') # 关闭文件 f.close()2.4 写操作快速入门
# 1. 打开文件 f = open('python.txt', 'w', encoding='utf8') # 2. 文件写入 f.write('hello world') # 3. 关闭文件 f.close()三、文件读写详解
3.1 上下文管理器(with 语句)
with是 Python 中一个上下文管理器的关键字,你可以把它理解成一个"自动打扫卫生的管家"。
为什么不推荐手动 close?
如果写文件时发生异常,
f.close()可能根本不会执行忘记关闭文件会导致内存泄漏、文件被占用等问题
with open('file.txt', 'w', encoding='utf8') as f: f.write('Hello') # 文件自动关闭,不用你操心优点:
不管代码是否报错,文件都会被正确关闭
代码更简洁、更安全
你再也不用担心忘记
close()了
3.2read()读取
# 读取指定数量的字符 with open('python.txt', 'r', encoding='utf8') as f: content = f.read(5) # 读取前5个字符 print(content) # 读取全部内容 with open('python.txt', 'r', encoding='utf8') as f: content = f.read() # 读取所有内容 print(content)⚠️ 注意:如果读取不成功,可能是读取指针在末尾,需要使用seek(0)将指针移动到最前面。
with open('python.txt', 'w+', encoding='utf8') as f: f.write('Hello World') # f.read() # 读不到内容(指针在末尾) f.seek(0) # 将指针移动到开头 content = f.read() print(content) # 输出: Hello World3.3readline()读取一行
# 一次读取一行内容 with open('python.txt', 'r', encoding='utf8') as f: content = f.readline() print(f'第一行:{content}') content = f.readline() print(f'第二行:{content}')3.4readlines()读取所有行
# 一次读取所有行,返回列表 with open('python.txt', 'r', encoding='utf8') as f: content = f.readlines() # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc'] print(content)3.5 文件指针操作
| 方法 | 作用 |
|---|---|
f.tell() | 获取当前文件指针位置 |
f.seek(0) | 将指针移动到文件开头 |
f.seek(0, 2) | 将指针移动到文件末尾 |
with open('test.txt', 'w+', encoding='utf8') as f: print(f.tell()) # 输出: 0 (开头) f.write('Hello') print(f.tell()) # 输出: 5 (末尾) f.seek(0) # 回到开头 print(f.read()) # 输出: Hello四、文件备份案例
需求
已知当前目录下存在一个任意文件,完成对该文件的备份功能(备份文件名为xx[备份].txt)。
实现思路
读取原始文件
创建一个空的备份文件
从原始文件中把数据写入到空的备份文件中
# 使用 with 同时管理两个文件 with open('test1.txt', 'r', encoding='utf8') as f1, \ open('test1[备份].txt', 'w', encoding='utf8') as f2: data = f1.read() f2.write(data) # 退出 with 代码块后,f1 和 f2 自动关闭五、OS模块实现文件操作
5.1 什么是 OS 模块
os 模块是 Python 标准库的一部分,它提供了丰富的功能来与操作系统进行交互。通过 os 模块,我们可以执行许多与文件和目录管理相关的操作。
import os # 使用 os 模块的相关功能 os.函数名()
5.2 文件操作
| 编号 | 函数 | 功能 |
|---|---|---|
| 1 | os.rename(目标文件名称, 新文件名称) | 对文件进行重命名操作 |
| 2 | os.remove(要删除文件名称) | 对文件进行删除操作 |
import os # 1. 重命名文件 os.rename('temp.txt', 'python.txt') print('✅ 已重命名为 python.txt') # 2. 删除文件 os.remove('python.txt') print('✅ 已删除 python.txt')5.3 文件夹操作
| 编号 | 函数 | 功能 |
|---|---|---|
| 1 | os.mkdir(新文件夹名称) | 创建一个指定名称的文件夹 |
| 2 | os.getcwd() | 获取当前目录名称 |
| 3 | os.chdir(切换后目录名称) | 切换目录 |
| 4 | os.listdir(目标目录) | 获取指定目录下的文件信息,返回列表 |
| 5 | os.rmdir(目标目录) | 删除一个指定名称的"空"文件夹 |
案例:文件夹综合操作
import os # 1. 将当前工作目录切换到 static 文件夹 os.chdir('static') # 2. 创建 images 以及 videos 文件夹 os.mkdir('images') os.mkdir('videos') # 3. 获取目录下的所有文件 for i in os.listdir(): print(i) # 4. 移除 videos 文件夹 os.rmdir('videos')六、Python模块
6.1 什么是模块
Python 模块,通俗来说,就是一个包含了 Python 代码的.py文件。
你可以把它想象成一本使用说明书或工具箱。当你需要完成某个特定任务时,不用从头开始造轮子,直接拿来这个"工具箱"就能用。
6.2 模块的导入方式
①import 模块名
import 模块名 import 模块名1, 模块名2 模块名.功能名()
案例:
import time print("开始") time.sleep(1) # 让程序睡眠1秒 print("结束")②from 模块名 import 功能名
from 模块名 import 功能名 功能名()
案例:
from time import sleep print("开始") sleep(1) # 让程序睡眠1秒 print("结束")③from 模块名 import *
from 模块名 import * 功能名()
案例:
from time import * print("开始") sleep(1) print("结束")④as定义别名
# 模块别名 import 模块名 as 别名 # 功能别名 from 模块名 import 功能 as 别名
案例:
# 模块别名 import time as tt tt.sleep(2) print('HELLO') # 功能别名 from time import sleep as sl sl(2) print('HELLO')6.3 制作自定义模块
每个 Python 文件都可以作为一个模块,模块的名字就是文件的名字。
# my_module1.py def test(a, b): print(a + b) # 在其他文件中导入使用 import my_module1 my_module1.test(10, 20) # 输出: 30
6.4__name__与测试代码
在实际开发中,开发人员会在模块中添加测试代码。但问题是,其他文件导入该模块时,测试代码也会被执行。
# my_module1.py def test(a, b): print(a + b) # 使用 __name__ 控制测试代码仅在当前文件执行 if __name__ == '__main__': test(1, 1) # 只有直接运行此文件时才执行
__name__变量:
当模块被直接运行时,
__name__的值为'__main__'当模块被导入时,
__name__的值为模块名
七、Python包
7.1 什么是 Python 包
Python 包,通俗来说,就是一个用来存放多个模块(.py 文件)的文件夹。
你可以把包想象成一个工具箱收纳箱——它把功能相似的工具(模块)整理在一起,方便查找和使用,也能避免不同功能之间的混乱。
my_package/ ├── __init__.py # 包的标识文件 ├── my_module1.py # 模块1 ├── my_module2.py # 模块2 └── my_module3.py # 模块3
7.2__init__.py的作用
这是 Python 包中最重要的标识文件:
告诉 Python 解释器,这个文件夹是一个包,可以从中导入模块
可以优化导入的路径
# __init__.py 中优化导入路径 from .my_module1 import info_print1 from .my_module2 import info_print2 # 现在可以直接导入功能 from my_package import info_print1, info_print2
7.3 导入包的方式
方式1:import 包名.模块名
import my_package.my_module1 import my_package.my_module2 my_package.my_module1.info_print1() my_package.my_module2.info_print2()
方式2:from 包名 import 模块名
from my_package import my_module1, my_module2 my_module1.info_print1() my_module2.info_print2()
方式3:使用__init__.py优化(推荐)
# __init__.py from .my_module1 import info_print1 from .my_module2 import info_print2 # 直接导入功能 from my_package import info_print1, info_print2 info_print1() info_print2()
7.4 隐式包 vs 常规包
| 类型 | __init__.py | 特点 |
|---|---|---|
| 常规包 | ✅ 包含 | 可以优化导入路径,功能更强大 |
| 隐式包(命名空间包) | ❌ 不包含 | 更轻量,但不能优化导入路径 |
八、总结
文件操作核心要点
| 操作 | 函数 | 说明 |
|---|---|---|
| 打开文件 | open() | 返回文件对象 |
| 读取文件 | read()、readline()、readlines() | 三种读取方式 |
| 写入文件 | write() | 写入内容 |
| 关闭文件 | close() | 释放资源 |
| 自动管理 | with语句 | 自动关闭,推荐使用 |
文件访问模式速查
| 模式 | 读 | 写 | 指针位置 | 文件不存在 |
|---|---|---|---|---|
r | ✅ | ❌ | 开头 | ❌ |
w | ❌ | ✅ | 开头(清空) | ✅ |
a | ❌ | ✅ | 末尾(追加) | ✅ |
r+ | ✅ | ✅ | 开头 | ❌ |
w+ | ✅ | ✅ | 开头(清空) | ✅ |
a+ | ✅ | ✅ | 末尾(追加) | ✅ |
OS 模块操作速查
| 分类 | 函数 | 功能 |
|---|---|---|
| 文件操作 | os.rename() | 重命名文件 |
| 文件操作 | os.remove() | 删除文件 |
| 目录操作 | os.mkdir() | 创建目录 |
| 目录操作 | os.rmdir() | 删除空目录 |
| 目录操作 | os.chdir() | 切换目录 |
| 目录操作 | os.getcwd() | 获取当前目录 |
| 目录操作 | os.listdir() | 列出目录内容 |
模块与包导入方式
| 方式 | 语法 | 使用 |
|---|---|---|
| 导入模块 | import 模块名 | 模块名.功能() |
| 导入功能 | from 模块 import 功能 | 功能() |
| 全部导入 | from 模块 import * | 功能() |
| 模块别名 | import 模块 as 别名 | 别名.功能() |
| 功能别名 | from 模块 import 功能 as 别名 | 别名() |
📝最后提醒:文件操作和包管理是 Python 编程中非常重要的技能。掌握好
with语句管理文件资源、os模块操作文件系统、模块和包的导入机制,你就能写出更加健壮、可维护的代码。多敲代码、多实践,自然就能熟练运用!
如果觉得有帮助,欢迎点赞、收藏、评论!😊
