python逐个读取文件_在Python中多次读取同一文件

我需要下载文本文件的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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值