Ale*_*x I 7 python io file record separator
我想for line in file在python中做一个方法,其中行尾被重新定义为我想要的任何字符串.另一种说法是我想从文件而不是行读取记录; 我希望它与阅读线一样快速和方便.
这是python,相当于设置perl的$/输入记录分隔符,或者Scanner在java中使用.这不一定要使用for line in file(特别是,迭代器可能不是文件对象).只是等同于避免将太多数据读入内存的东西.
另请参阅: 添加对使用任意分隔符读取记录到标准IO堆栈的支持
aba*_*ert 10
Python 2.x file对象或Python 3.3 io类中没有任何内容可以让您为其指定自定义分隔符readline.(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]
Run Code Online (Sandbox Code Playgroud)
这是一个愚蠢的例子:
>>> s = io.StringIO('abcZZZdefZZZghiZZZjklZZZmnoZZZpqr')
>>> d = delimited(s, 'ZZZ', bufsize=2)
>>> list(d)
['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr']
Run Code Online (Sandbox Code Playgroud)
如果你想让二进制文件和文本文件都正确,特别是在3.x中,它有点棘手.但如果只需要为一种或另一种(以及一种语言或另一种语言)工作,你可以忽略它.
同样,如果您正在使用Python 3.x(或使用ioPython 2.x中的对象),并且想要使用已经在a中维护的缓冲区BufferedIOBase而不是仅仅将缓冲区放在缓冲区之上,那就是棘手.该io文档做解释如何做的一切......但我不知道有什么简单的例子,所以你真的不得不阅读页面的至少一半,脱脂休息.(当然,你可以直接使用原始文件......但如果你想找到unicode分隔符则不能......)
| 归档时间: |
|
| 查看次数: |
5398 次 |
| 最近记录: |