[英]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 file
的for 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.