python – 使用带有索引或解析行的readlines()吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用带有索引或解析行的readlines()吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1927字,纯文字阅读大概需要3分钟。
内容图文
![python – 使用带有索引或解析行的readlines()吗?](/upload/InfoBanner/zyjiaocheng/770/0375d15a8b1b4d85ae69f0d0feefa933.jpg)
我正在创建一个简单的测试函数,通过从文件读取要评估的表达式和预期结果来断言我正在开发的解释器的输出是正确的,就像python的doctest一样.这是针对方案的,因此输入文件的示例将是
> 42
42
> (+ 1 2 3)
6
我第一次尝试解析这样一个文件的函数如下所示,它似乎按预期工作:
def run_test(filename):
interp = Interpreter()
response_next = False
num_tests = 0
with open(filename) as f:
for line in f:
if response_next:
assert response == line.rstrip('\n')
response_next = False
elif line.startswith('> '):
num_tests += 1
response = interp.eval(line[2:])
response = str(response) if response else ''
response_next = True
print "{:20} Ran {} tests successfully".format(os.path.basename(filename),
num_tests)
我想通过删除response_next标志来略微改进它,因为我不是这些标志的粉丝,而是用next(f)读入elif块中的下一行.关于我在freenode的IRC询问的问题,我有一个小小的无关问题.我得到了我想要的帮助,但我也得到了使用f.readlines()的建议,然后在结果列表中使用索引. (我还被告知我可以在itertools中使用groupby()作为成对行,但我稍后会研究这种方法.)
现在回答这个问题,我很好奇为什么这种方法会更好,但是我的网络连接在火车上是一个不稳定的,我无法问,所以我会在这里问它.为什么用readlines()读取所有内容而不是在运行时读取每一行时更好?
我真的很纳闷,因为我的感觉正好相反,我认为一次解析一条线看起来更干净,所以一切都完成了.我通常避免在Python中使用数组中的索引,而更喜欢使用迭代器和生成器.也许不可能回答和猜测这个人在思考这个主观意见时的想法,但是如果有一些一般的建议,我会很高兴听到它.
解决方法:
将所有内容读入数组会为您提供相应的随机访问:您使用数组索引向下移动数组,并且可以随时检查下一步并在必要时进行备份.
如果您可以在不进行备份的情况下执行任务,则不需要随机访问,如果没有备份,则更加清晰.在您的示例中,您的语法似乎始终是单行(?)表达式,后跟预期的响应.所以,我已经编写了一个顶级循环,每个表达式 – 值对迭代一次,根据需要读取行.
如果要支持多行表达式和结果,可以编写单独的函数来读取每个表达式:一个读取完整表达式,一个读取结果(直到下一个空白行).重要的是它们应该能够消耗所需的输入,并将输入指针保持在合理的状态以进行下一次输入.
内容总结
以上是互联网集市为您收集整理的python – 使用带有索引或解析行的readlines()吗?全部内容,希望文章能够帮你解决python – 使用带有索引或解析行的readlines()吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。