我想知道使用 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 的使用,我认为它缺乏意图并且让代码阅读者感到困惑为什么要这样做,但这是主观的。
