窥视语法和用法

时间:2012-09-29 15:49:34

标签: python python-3.x python-2.7

我正在使用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}},bcdcdedef

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

efg

我在哪里犯错?

4 个答案:

答案 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]。问题解决了。