0

我创建了一个小类来在 python 的tempfile.TemporaryFIle. 我的第一次调用readline返回一行(如预期的那样),但对该函数的所有后续调用都返回空字符串。

在向您展示源代码之前,这里是上述行为的一个示例:

lines = ["Now is the winter of our discontent",
        "Made glorious summer by this sun of York;",
        "And all the clouds that lour'd upon our house",
        "In the deep bosom of the ociean buried."]

f = EphemeralFile()
f.write('\n'.join(lines))  # just in case writelines is screwing up as well

f.readline()
f.readline()

输出:

'Now is the winter of our discontent'
''

现在这里是注释的类方法。请注意,此方法所属的类不是File. 相反,它持有对 a 的引用,并为'tell 方法tempfile.TemporaryFile等方法提供别名:self.tellTemporaryFile

def readline(self, size=-1):
    fptr = self.tell()  # alias of self._file.tell
    bytes = []
    got_line = False
    while not got_line:
        # self.read is NOT an alias, but calls self._file.read
        bytes.append(self.read(256))  
        offset = '\n' in bytes[-1]
        if not bytes[-1] or offset:
            end = bytes.pop().split('\n', 1)[0]
            bytes.append(end)
            got_line = True

    plaintext = ''.join(bytes)
    # seek is aliased from self._file.seek
    self.seek(fptr + len(plaintext) + offset)  # rewind; offset is bool.
    return plaintext

我一生都无法弄清楚我哪里出错了。我有一个挥之不去的怀疑,认为这是我的一个愚蠢的疏忽,因此非常欢迎新的眼睛。

提前致谢!

编辑:对于那些感兴趣的人,这里是全班。

4

1 回答 1

0

一种可能的解释:您在 Windows 上并以文本模式打开文件。行以结尾,\r\n\r为您删除了字符。然后,当您认为您正在寻找下一行时,您实际上最终在\n.

顺便说一句,返回值readline()应该包括\n调用者可以区分空行和文件结尾。

于 2013-05-16T13:08:02.747 回答