簡體   English   中英

Python:從文件讀取空格分隔的字符串,類似於readline

[英]Python: Read whitespace separated strings from file similar to readline

在Python中, f.readline()返回文件f的下一行。 也就是說,它從f的當前位置開始,讀取直到遇到換行符,返回中間的所有內容並更新f的位置。

現在我想完全相同,但是對於空格分隔的文件(不僅僅是換行符)。 例如,考慮帶有內容的文件f

token1 token2

token3                            token4


         token5

所以我正在尋找一些函數readtoken()這樣在打開f之后, f.readtoken()的第一次調用返回token1 ,第二次調用返回token2等。

為了提高效率並避免長行或非常大的文件出現問題,應該沒有緩沖。

我幾乎可以肯定,這應該可以通過標准庫“開箱即用”。 但是,我沒有找到任何合適的函數或重新定義readline()的分隔符的方法。

你需要創建一個包裝函數; 這很容易:

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()函數逐個獲取標記:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM