2011-06-08 45 views
6

可以在讀取行時更改換行符.readline()方法的查找方式嗎?我可能需要從一個文件對象中讀取一個流,這個文件對象會被換行符以外的分隔符所替代,並且它可以方便地一次獲得一個塊。 file對象沒有一個readuntil,我就不會去創造,如果我可以使用readline更改換行符.readline()查找

編輯:


我還沒試過它比其他stdin的管道;但這似乎工作。

class cfile(file): 
    def __init__(self, *args): 
     file.__init__(self, *args) 

    def readuntil(self, char): 
     buf = bytearray() 
     while True: 
      rchar = self.read(1) 
      buf += rchar 
      if rchar == char: 
       return str(buf) 

用法:

>>> import test 
>>> tfile = test.cfile('/proc/self/fd/0', 'r') 
>>> tfile.readuntil('0') 
this line has no char zero 
this one doesn't either, 
this one does though, 0 
"this line has no char zero\nthis one doesn't either,\nthis one does though, 0" 
>>> 

回答

6

考慮創建使用file.read()發電機併產生由下式給出字符分隔塊。

編輯:

您提供的樣本應該只是罰款。我寧願使用一個發電機,但:

def chunks(file, delim='\n'): 
    buf = bytearray(), 
    while True: 
     c = self.read(1) 
     if c == '': return 
     buf += c 
     if c == delim: 
      yield str(buf) 
      buf = bytearray() 
+0

我編輯了一個代碼樣本,我在想什麼;子類化'file'對象。 – tMC 2011-06-08 21:12:34

+0

正如目前所寫,如果文件不以'delim'結尾,這將不會產生任何尾隨字符。也許最好使用'if c =='':return str(buf)'。 – martineau 2015-01-11 15:42:21