我正在使用peek
编写自己的程序,这就是我所拥有的:
with open('temp.txt', 'r') as inpf2:
while True:
c = [inpf2.read(1)]
if not c:
break
k = c.peek(2)
for d in k:
if(d == ""):
break
else:
c = c.append(d)
print c
在此计划中,我使用peek
查看文本文件中的2个字符,其中包含abcdefg
等文字,并尝试打印出3个字符的字符串,如abc
,{ {1}},bcd
,cde
,def
。
但是当我执行这个程序时,我收到了错误,
efg
我在哪里犯错?
答案 0 :(得分:2)
我不知道任何Python对象有peek
方法(除了io.BufferedStream
,这是从文档中搜索返回的唯一方法)。
我担心您必须自己定义peek
功能。你可以找到一个可以帮助你入门的recipe。
对于您的特定问题,也许您可以考虑使用collections.deque
答案 1 :(得分:1)
不要试图向前看,记住你已经看过的角色。也就是说,不要打印当前字符和接下来的两个字符,打印当前字符和 last 两个字符。
from collections import deque
with open('temp.txt') as infile:
window = deque(infile.read(2), maxlen=3)
nextchar = infile.read(1)
while nextchar:
window.append(nextchar)
print "".join(window)
nextchar = infile.read(1)
答案 2 :(得分:0)
c
是一个列表,因此您在列表中尝试peek
。至少,您必须在列表中的第一个元素上调用peek
,所以类似于c[0].peek()
但是即便如此,你正在用文件中的数据填充c
,所以你真的想在文件对象上调用peek
而不是返回数据,如下所示:{ {1}}
答案 3 :(得分:0)
我来到这里想知道这个,然后让我震惊:peek
就是list[-1]
。问题解决了。