Python面试题更新 2026-08-03

给定一台内存仅为 4G 的机器,需要读取一个大小为 8G 的 Python 文件,应如何在 Python 中进行读取以规避内存不足?请说明具体方案及原因。

考察说明

考查对大文件读取时的内存管理意识,以及 Python 中迭代式读取方法的掌握。

回答思路

  1. 【回答框架 1】Python 的 read() 会一次性把整个文件载入内存,8G 文件必然导致 MemoryError。应使用迭代器逐行读取,例如 for line in f: 内部按行缓冲,每次内存占用约一行大小,避开一次性载入。
  2. 【回答框架 2】若文件为二进制或需要按块处理,可使用 f.read(chunk_size) 循环读取,将 chunk_size 设为合理值如 1MB 或 4MB,每次仅占用一块内存,处理完即释放。
  3. 【回答框架 3】高质量做法是使用 with open(...) as f 确保文件自动关闭;如需并发处理,可结合 mmap 进行内存映射,但需注意 mmap 在 32 位系统上受地址空间限制,且 4G 内存可能不适合完整映射 8G 文件,应谨慎使用。
  4. 【回答框架 4】若文件为 CSV 等结构化数据,可使用 pandas 的 chunksize 参数或 csv 模块按行迭代,两者均能控制内存峰值;处理完后应及时释放引用。
  5. 【回答框架 5】最终内存占用还取决于行或块的大小,若单行极大,仍可能超限,可进一步按字节块读取并手动拆分行。
  6. 【关键点 1】采用迭代式读取,避免 read() 一次性载入整个文件。
  7. 【关键点 2】通过 f.read(chunk_size) 或 for line in f 控制每次内存占用。
  8. 【关键点 3】使用 with 语句确保资源释放。
  9. 【关键点 4】针对结构化数据可用 chunksize 分块处理。
  10. 【易错点 1】不要在循环体中累积整个文件内容,否则仍会内存溢出。
  11. 【易错点 2】注意单行可能极大,按行读取也可能超限,需按字节块处理。
  12. 【易错点 3】避免同时打开多个大文件或多个未释放的块,防止内存峰值过高。