资讯专栏INFORMATION COLUMN

直接从压缩包中读取,遍历CSV文件

FrancisSoung / 3767人阅读

摘要:最近这段时间遇到了一个问题,直接打开压缩包文件后,用读后,用进行遍历时,会提示。出问题的代码是这样的的英文缩写是分析原因后,主要是因为读进来的内容是类型,读进去的类型也是,造成无法遍历。

最近这段时间遇到了一个问题,直接打开压缩包文件后,用csv.reader读后,用for in 进行遍历时,会提示:iterator should return strings not bytes (did you open the file in text mode ?)。出问题的代码是这样的:

import io
import zipfile
import csv

with zipfile.ZipFile("./12.zip") as zf:
    name = zf.namelist()[0]
    csvfile = zf.open(name)
    for x,y in csv.reader(csvfile):
        print(x,"的英文缩写是:",y)

分析原因后,主要是因为 ZipFile 读进来的内容是bytes类型,csv.reader读进去的类型也是bytes,造成无法遍历。
想到的第一个办法是用decode()进行转换,但csv.reader的参数应该是一个文件流,而非字符串,需要用io.StringIO()进行封装。 有效的代码如下:

with zipfile.ZipFile("./12.zip") as zf:
    name = zf.namelist()[0]
    csvfile = io.StringIO(zf.open(name).read().decode("gbk"))
    for x,y in csv.reader(csvfile):
        print(x,"的英文缩写是:",y)

这样问题就得以解决。

打开硬盘中的文件多数是采用流的方式进行的,实际上在本例中,ZipFile实现了从硬盘到内存的流操作,zf.open实现了从压缩文件到csv文件的流操作,io.StringIO封装了对字符串的流。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41576.html

相关文章

  • Android 安全开发之 ZIP 文件目录遍历

    摘要:阿里聚安全的应用漏洞扫描服务,可以检测出应用的文件目录遍历风险。阿里聚安全对开发者建议对重要的压缩包文件进行数字签名校验,校验通过才进行解压。 1、ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在../的字符串,攻击者可以利用多个../在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件。如果被覆盖掉的文件是动态链接so、dex或者odex文件,轻则产生本地拒绝服务漏洞...

    sorra 评论0 收藏0
  • Python 编程速成

    摘要:同时无论在哪种平台上,都可以用进行系统编程。这样导入模块并使用生成随机数中的模块提供了生成随机数的函数。生成的随机数介于和之间。可以从自己定义的范围中生成一个随机数,如下所示操作日期和时间你可以从日期中提取所需的值,如下所示。 翻译:疯狂的技术宅https://likegeeks.com/python-... 本文首发微信公众号:前端先锋欢迎关注,每天都给你推送新鲜的前端技术文章 ...

    187J3X1 评论0 收藏0

发表评论

0条评论

FrancisSoung

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<