Python 2.x
file对象或Python 3.3
io类中没有任何内容可让您为指定自定义分隔符
readline。(
for line infile最终使用与相同的代码
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(或
ioPython
2.x中的对象),并且想要利用已经维护在其中的缓冲区,
BufferedIObase而不是仅仅将缓冲区放在缓冲区之上,那棘手的。这些
io文档的确说明了如何做所有事情……但是我不知道任何简单的示例,因此您实际上必须至少阅读该页面的一半,然后略过其余部分。(当然,您可以直接使用原始文件…,但是如果您要查找unipre分隔符,则不能使用…)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)