在Python中多次读取同一文件
发布时间:2020-12-20 11:12:21 所属栏目:Python 来源:网络整理
导读:我需要下载文本文件的zip存档,将存档中的每个文本文件分发给其他处理程序进行处理,最后将解压缩的文本文件写入磁盘. 我有以下代码.它在同一个文件上使用多个打开/关闭,这看起来并不优雅.如何让它更优雅高效? zipped = urllib.urlopen('www.abc.com/xyz.zip'
我需要下载文本文件的zip存档,将存档中的每个文本文件分发给其他处理程序进行处理,最后将解压缩的文本文件写入磁盘.
我有以下代码.它在同一个文件上使用多个打开/关闭,这看起来并不优雅.如何让它更优雅高效? zipped = urllib.urlopen('www.abc.com/xyz.zip') buf = cStringIO.StringIO(zipped.read()) zipped.close() unzipped = zipfile.ZipFile(buf,'r') for f_info in unzipped.infolist(): logfile = unzipped.open(f_info) handler1(logfile) logfile.close() ## Cannot seek(0). The file like obj does not support seek() logfile = unzipped.open(f_info) handler2(logfile) logfile.close() unzipped.extract(f_info) 解决方法
您的答案在您的示例代码中.只需使用StringIO来缓冲日志文件:
zipped = urllib.urlopen('www.abc.com/xyz.zip') buf = cStringIO.StringIO(zipped.read()) zipped.close() unzipped = zipfile.ZipFile(buf,'r') for f_info in unzipped.infolist(): logfile = unzipped.open(f_info) # Here's where we buffer: logbuffer = cStringIO.StringIO(logfile.read()) logfile.close() for handler in [handler1,handler2]: handler(logbuffer) # StringIO objects support seek(): logbuffer.seek(0) unzipped.extract(f_info) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |