Python
- 基础
-
库
- 其他
- argparse命令行参数解析
- asyncio自带异步编程库
- aiofiles异步文件读写库
- beautifulsoup4_HTML_XML解析库
- colorama_在终端输出漂亮的字
- datasets数据集处理
- html2text
- httpx_HTTP请求库
- litellm
- loguru日志库
- numpy科学计算基础库
- pillow图像处理
- pydantic数据验证
- pyyaml
- requests_HTTP请求库
- tenacity重试
- tiktoken计算Token量
- torch机器学习_深度学习框架
- tomli TOML文件解析库
- tomllib 自带TOML文件解析库
- unidiff_文本_文件差异对比
- uvicorn_Web服务器
- langchain
**aiofiles 是一个 Python 第三方异步 I/O 库,用于在异步编程(如 asyncio)中以非阻塞的方式读写文件。**
---
## 一、aiofiles 是什么?(简单理解)
- 在传统的 Python 文件操作中(比如用 `open()` 和 `read()`),文件读写是 **同步阻塞** 的,也就是说,当程序在读写文件时,整个线程会被卡住,无法同时处理其他任务。
- 在使用 **asyncio(异步编程)** 时,如果你直接用内置的 `open()`,它仍然会阻塞事件循环,影响程序并发性能。
- **aiofiles 的作用就是:让你可以在异步代码中,以非阻塞(异步)的方式读写文件,不会阻塞事件循环,从而提升程序的并发能力。**
---
## 二、aiofiles 解决什么问题?
| 场景 | 问题 | aiofiles 的作用 |
|------|------|----------------|
| 在异步程序(如 FastAPI、aiohttp、asyncio 服务)中读写文件 | 使用普通的 `open()` 会阻塞事件循环,影响并发性能 | 提供异步版本的文件读写方法,如 `async with aiofiles.open(...) as f:` |
| 需要高并发处理文件操作 | 同步文件操作会导致任务排队,效率低 | 允许文件操作与其他异步任务并发执行,不阻塞主线程 |
| 构建异步 Web 服务,需要异步读写上传/下载的文件 | 传统文件操作不适合异步框架 | 提供与 `asyncio` 兼容的异步文件接口 |
---
## 三、安装 aiofiles
使用 pip 安装:
```bash
pip install aiofiles
```
---
## 四、aiofiles 基本使用示例
### 示例 1:异步读取文件
```python
import asyncio
import aiofiles
async def read_file():
async with aiofiles.open('example.txt', mode='r', encoding='utf-8') as f:
contents = await f.read()
print(contents)
asyncio.run(read_file())
```
### 示例 2:异步写入文件
```python
import asyncio
import aiofiles
async def write_file():
async with aiofiles.open('output.txt', mode='w', encoding='utf-8') as f:
await f.write('这是异步写入的内容\n')
await f.write('第二行内容\n')
asyncio.run(write_file())
```
---
## 五、aiofiles 常用方法(异步版文件操作)
| 方法 | 说明 |
|------|------|
| `aiofiles.open()` | 异步打开文件,返回一个异步文件对象,类似于内置的 `open()` |
| `await f.read()` | 异步读取全部内容 |
| `await f.readline()` | 异步读取一行 |
| `await f.readlines()` | 异步读取所有行,返回列表 |
| `await f.write()` | 异步写入内容 |
| `await f.writelines()` | 异步写入多行内容 |
> 这些方法都是 **异步的(需要 await)**,必须在 `async` 函数中使用。
---
## 六、总结(中文)
> **aiofiles 是一个支持异步文件读写的 Python 库,适用于 asyncio 异步编程环境。它让文件操作不会阻塞事件循环,从而可以在异步 Web 服务、后台任务等场景中高效地处理文件,提升整体并发性能。**
---
✅ **简单来说:**
> 如果你在使用 **asyncio、FastAPI、aiohttp 等异步框架**,并且需要 **读写文件但不想阻塞程序运行**,那么应该使用 **aiofiles**,它提供了异步版本的文件操作接口。