摘要:最近这段时间遇到了一个问题,直接打开压缩包文件后,用读后,用进行遍历时,会提示。出问题的代码是这样的的英文缩写是分析原因后,主要是因为读进来的内容是类型,读进去的类型也是,造成无法遍历。
最近这段时间遇到了一个问题,直接打开压缩包文件后,用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
摘要:阿里聚安全的应用漏洞扫描服务,可以检测出应用的文件目录遍历风险。阿里聚安全对开发者建议对重要的压缩包文件进行数字签名校验,校验通过才进行解压。 1、ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在../的字符串,攻击者可以利用多个../在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件。如果被覆盖掉的文件是动态链接so、dex或者odex文件,轻则产生本地拒绝服务漏洞...
摘要:同时无论在哪种平台上,都可以用进行系统编程。这样导入模块并使用生成随机数中的模块提供了生成随机数的函数。生成的随机数介于和之间。可以从自己定义的范围中生成一个随机数,如下所示操作日期和时间你可以从日期中提取所需的值,如下所示。 翻译:疯狂的技术宅https://likegeeks.com/python-... 本文首发微信公众号:前端先锋欢迎关注,每天都给你推送新鲜的前端技术文章 ...
阅读 3058·2019-08-30 15:56
阅读 1158·2019-08-29 15:20
阅读 1504·2019-08-29 13:19
阅读 1428·2019-08-29 13:10
阅读 3345·2019-08-26 18:27
阅读 3029·2019-08-26 11:46
阅读 2198·2019-08-26 11:45
阅读 3605·2019-08-26 10:12