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

时间:2016-10-15 00:11:48

标签: python file buffer tail

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

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

     `

2 个答案:

答案 0 :(得分:2)

我想在这里走出困境并尝试猜测问题是你使用了__init__魔术方法的错误名称(正如Hai Vu所注意到的那样)。请注意,代码中有三个尾随下划线而不是两个。

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

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

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

答案 1 :(得分:-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