0

我正在编写自己的程序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, bcd, cde, def, efg.

但是当我执行这个程序时,我得到了错误,

k = c.peek(2)  
AttributeError: 'list' object has no attribute 'peek'.  

我在哪里做错了?

4

4 回答 4

2

我不知道任何具有peek方法的 Python 对象(除了io.BufferedStream,这是从文档中的搜索返回的唯一方法)。

恐怕你必须自己定义一个peek函数。您可以在网上找到可以帮助您入门的食谱。

对于您的特定问题,也许您可​​以考虑使用collections.deque

于 2012-09-29T16:10:22.830 回答
2

我来到这里想知道这一点,然后它击中了我:peek很简单list[-1]。问题解决了。

于 2018-12-13T02:28:08.777 回答
1

不要试图往前看,记住你已经看过的角色。即不打印当前字符和后两个字符,打印当前字符和两个字符。

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)
于 2012-09-29T17:07:14.793 回答
0

c是一个列表,所以你试图peek在一个列表中。至少,你必须调用peek列表中的第一个元素,所以像c[0].peek()

但即便如此,您正在填充c文件中的数据,所以您真的想调用peek您的文件对象而不是返回的数据,如下所示:k = inpf2.peek(2)

于 2012-09-29T15:51:47.187 回答