簡體   English   中英

如何在python中從文件中讀取自定義分隔符終止的記錄?

[英]How to read records terminated by custom separator from file in python?

我想在python中for line in file做一種方法,其中行尾被重新定義為我想要的任何字符串。 另一種說法是我想從文件而不是行讀取記錄; 我希望它與閱讀線一樣快捷方便。

這是python,相當於設置perl的$/輸入記錄分隔符,或者在java中使用Scanner 這不一定必須for line in file中的for line in file (特別是,迭代器可能不是文件對象)。 只是等同於避免將太多數據讀入內存的東西。

另請參閱: 添加對使用任意分隔符讀取記錄到標准IO堆棧的支持

Python 2.x file對象或Python 3.3 io類中沒有任何內容可以讓您為readline指定自定義分隔符。 for line in filefor line in file最終使用與readline相同的代碼。)

但是自己構建它很容易。 例如:

def delimited(file, delimiter='\n', bufsize=4096):
    buf = ''
    while True:
        newbuf = file.read(bufsize)
        if not newbuf:
            yield buf
            return
        buf += newbuf
        lines = buf.split(delimiter)
        for line in lines[:-1]:
            yield line
        buf = lines[-1]

這是一個愚蠢的例子:

>>> s = io.StringIO('abcZZZdefZZZghiZZZjklZZZmnoZZZpqr')
>>> d = delimited(s, 'ZZZ', bufsize=2)
>>> list(d)
['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr']

如果你想讓二進制文件和文本文件都正確,特別是在3.x中,它有點棘手。 但如果只需要為一種或另一種(以及一種語言或另一種語言)工作,你可以忽略它。

同樣,如果您正在使用Python 3.x(或在Python 2.x中使用io對象),並且想要使用已在BufferedIOBase中維護的緩沖區而不是僅在緩沖區頂部放置緩沖區那太棘手了。 io文檔確實解釋了如何做所有事情......但我不知道任何簡單的例子,所以你真的必須閱讀該頁面的至少一半並瀏覽其余部分。 (當然,你可以直接使用原始文件......但如果你想找到unicode分隔符則不能......)

暫無
暫無

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

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