Python:从文件读取空格分隔的字符串,类似于readline

时间:2013-05-06 15:58:37

标签: python file-io

在Python中,f.readline()返回文件f中的下一行。也就是说,它从f的当前位置开始,读取直到遇到换行符,返回介于两者之间的所有内容并更新f的位置。

现在我想要完全相同,但是对于空格分隔的文件(不仅仅是换行符)。例如,考虑具有内容

的文件f
token1 token2

token3                            token4


         token5

所以我正在寻找一些函数readtoken(),这样在f打开后,f.readtoken()的第一次调用会返回token1,第二次调用会返回token2等等。

为了提高效率并避免长线或非常大的文件出现问题,应该没有缓冲。

我几乎可以肯定这应该可以通过标准库“开箱即用”。但是,我没有找到任何合适的函数或方法来重新定义readline()的分隔符。

1 个答案:

答案 0 :(得分:8)

您需要创建一个包装函数;这很容易:

def read_by_tokens(fileobj):
    for line in fileobj:
        for token in line.split():
            yield token

请注意,.readline()不会只是逐个字符地读取文件,直到遇到换行符为止;以块(缓冲区)读取文件以提高性能。

上述方法按行读取文件,但会在空格上生成结果。使用它像:

with open('somefilename') as f:
    for token in read_by_tokens(f):
        print(token)

因为read_by_tokens()是一个生成器,你需要直接在函数结果上循环,或者使用next() function逐个获取标记:

with open('somefilename') as f:
    tokenized = read_by_tokens(f)

    # read first two tokens separately
    first_token = next(tokenized)
    second_token = next(tokenized)

    for token in tokenized:
        # loops over all tokens *except the first two*
        print(token)