当我想使用pyparsing解析大尺寸文件时遇到这个问题。我已经为整个文件创建了pyparsing语法。但我不知道如何通过读取这个大文件逐行将字符串提供给解析器。目前我使用的方法如下:
pyparsingGrammer = some pyparsing grammar I created
PyparsingGrammar.parseString(open(filename).read())
除了大read()
的内存使用情况之外,我选择换行的另一个动机是将我的解析器扩展到实时情况,其中信息被提供给解析器一行,然后是另一行。
答案 0 :(得分:5)
你可以这样做:
with open(filename) as f:
for line in f:
PyparsingGrammar.parseString(line)
使用关键字with
会在完成后自动关闭文件,并为您提供使用的句柄。
for x in something:
do_something
是遍历iterables的标准方法(可以迭代的东西,例如:Python中的list, tuple, dictionary
。
我忘了提,但我猜你想的是:
当您使用with open(filename) as f
在Python中打开文件时,您将获得list
,其中列表中的每一行都是一个项目。这就是为什么你能够将f
视为迭代器的原因。