Skip to main content
 首页 » 编程设计

python之使用 yield 进行文件处理

2025年05月04日12cmt

我想知道使用 yield 进行文件处理是否是一个好习惯,

所以目前我使用函数 f()

f 遍历文件对象列表并生成文件对象。

 
files = [] 
for myfile in glob.glob(os.path.join(path, '*.ext')): 
    f = open(myfile, 'r') 
    files.append(f) 
 
def f(): 
    for f_obj in files: 
        yield f_obj 
        f_obj.close() 
 
for f_obj in f(): 
    // do some processing on file. 

这是在 Python 中处理文件的正确方法吗?

请您参考如下方法:

如果您正在阅读文本文件(例如 CSV),则 yield 非常适合使您的源成为生成器。您的代码有一点问题是 f_obj 非常通用,因此您无法使用 f() 函数完成很多工作。

我使用 yield 的简单示例是读取 CSV 文件 - lines() 将您的文件名转换为单行流。类似的东西here (目的是在内存中保留更少的数据)。

import csv  
 
def lines(path): 
    with open(path, 'r', newline='') as f: 
        for line in csv.reader(f): 
            yield line 
 
from pathlib import Path 
Path("file.txt").write_text("a,1,2\nb,20,40")  
 
gen = lines("file.txt") 
print(next(gen)) 
print(next(gen)) 

您最初以一种通用的方式展示了 yield 的使用,我认为它缺乏意图并且让代码阅读者感到困惑为什么要这样做,但这是主观的。