IO编程

2 阅读3分钟

1. IO编程

1.1 基本概念

程序在内存中运行,由CPU执行。数据流向内存的过程称为Input(输入),数据从内存流出的过程称为Output(输出)。

1.2 速度匹配问题

由于CPU和内存的执行速度远高于外设(如硬盘、网络),存在速度不匹配的问题,这导致了两种不同的IO处理方式:

同步IO:顺序执行,等待IO操作完成后再继续

异步IO:非阻塞执行,性能更高但编程模型复杂

  • 回调模式:类似服务员主动通知汉堡已做好
  • 轮询模式:类似短信通知,需要主动查询状态

2. 文件读写操作

文件操作基础

操作系统不允许普通程序直接操作磁盘,编程语言通过封装操作系统接口来实现文件访问。

文件打开与关闭

# 基本文件操作
f = open(file_name, mode)  # 打开文件,返回文件对象

常用mode参数:

  • r:读取模式
  • w:写入模式
  • a:追加模式
  • b:二进制模式
  • t:文本模式

2.3 安全的文件操作

由于文件读写可能出现IOError,需要确保文件正确关闭:

传统方式(繁琐)

try:
    f = open('test.txt', 'r')
    # 文件操作
finally:
    if f:
        f.close()

推荐方式(使用with语句)

with open('test.txt', 'r') as f:
    print(f.read())  # 自动执行close()

2.4 文件读取方法比较

方法特点适用场景
read()一次性读取所有内容小文件
readline()一次读取一行大文件逐行处理
readlines()读取所有行,返回列表配置文件读取
read(size)读取指定长度数据不确定文件大小

注意read()方法会移动文件指针,第二次读取可能为空。

2.5 文件编码处理

# 读取非UTF-8编码文件
with open('file.txt', 'r', encoding='gbk') as f:
    content = f.read()

# 读取二进制文件
with open('video.mp4', 'rb') as f:
    data = f.read()

2.6 文件写入机制

文件写入时,操作系统采用缓冲区机制:

  • 数据先写入内存缓冲区
  • 缓冲区满、调用close()或程序退出时,数据才写入磁盘
  • 使用with语句可避免数据丢失
with open('test.txt', 'w') as f:
    f.write('hello world')

3. 内存读写操作

3.1 StringIO:内存字符串操作

from io import StringIO

f = StringIO('')
f.write('hello')
f.write(' ')
f.write('world')
print(f.getvalue())  # 输出:hello world

3.2 BytesIO:内存二进制数据操作

from io import BytesIO

f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())  # 输出二进制数据

4. 文件与目录管理

Python的os模块提供了丰富的文件和目录操作功能:

4.1 环境变量操作

import os

# 获取系统环境变量
env_vars = os.environ

# 获取特定环境变量
path = os.environ.get('PATH')

4.2 注意事项

  • os模块的函数与操作系统相关(如Windows没有uname
  • 文件目录操作函数分布在osos.path模块中

5. 最佳实践总结

  1. 始终使用with语句:确保文件正确关闭,避免资源泄漏
  2. 按需选择读取方法:根据文件大小选择合适的数据读取方式
  3. 正确处理编码:明确指定文件编码,避免乱码问题
  4. 利用内存操作:对于临时数据,使用StringIO/BytesIO提高效率
  5. 考虑跨平台兼容性:使用os模块时注意操作系统差异