使用尾部和缓冲区获取文件中的最后 K 行

using a tail and a buffer to get last K lines in a file

我得到了这个缓冲区,并被告知进行反向输入以获取文件中的最后 K 行。从我一直在尝试做的事情来看,每次我尝试 运行 它说使用的代码不是输入的属性。有人可以告诉我为什么会这样吗?提前谢谢你。

class Input:
def __init___( self, file ):
    self.file = file # must open( <filename>, "rb" )
    self.length = 0
    self.used = 0
    self.buffer = ""
def read( self ):
    if self.used < self.length:  # if something in buffer 
        c = self.buffer[self.used]
        self.used += 1
        return c
    else:
        self.buffer = self.file.read( 20 ) # or 2048
        self.length = len( self.buffer )
        if self.length == 0:
            return -1
        else:
            c = self.buffer[0]
            self.used = 1

     `

尝试缩进...

class Input:
    def __init___( self, file ):
        self.file = file # must open( <filename>, "rb" )
        self.length = 0
        self.used = 0
        self.buffer = ""
    def read( self ):
        if self.used < self.length:  # if something in buffer 
            c = self.buffer[self.used]
            self.used += 1
            return c
        else:
            self.buffer = self.file.read( 20 ) # or 2048
            self.length = len( self.buffer )
            if self.length == 0:
                return -1
            else:
                c = self.buffer[0]
                self.used = 1

我要冒险尝试猜测问题是您为 __init__ 魔术方法使用了错误的名称(正如 Hai Vu 所注意到的)。请注意,您的代码中有三个尾随下划线,而不是两个。

由于 __init__ 方法是在构造对象期间调用以设置其各种属性的方法,因此 used 属性永远不会被设置,因为 __init__ 函数永远不会 运行.

之后,used 是在 Input.read 中访问的第一个属性,这使得 Python 抱怨它丢失了。

如果我是对的,删除下划线即可解决问题(尽管可能还有其他问题)。