摘要:最近這段時間遇到了一個問題,直接打開壓縮包文件后,用讀后,用進(jìn)行遍歷時,會提示。出問題的代碼是這樣的的英文縮寫是分析原因后,主要是因為讀進(jìn)來的內(nèi)容是類型,讀進(jìn)去的類型也是,造成無法遍歷。
最近這段時間遇到了一個問題,直接打開壓縮包文件后,用csv.reader讀后,用for in 進(jìn)行遍歷時,會提示: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 讀進(jìn)來的內(nèi)容是bytes類型,csv.reader讀進(jìn)去的類型也是bytes,造成無法遍歷。
想到的第一個辦法是用decode()進(jìn)行轉(zhuǎn)換,但csv.reader的參數(shù)應(yīng)該是一個文件流,而非字符串,需要用io.StringIO()進(jìn)行封裝。 有效的代碼如下:
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)
這樣問題就得以解決。
打開硬盤中的文件多數(shù)是采用流的方式進(jìn)行的,實際上在本例中,ZipFile實現(xiàn)了從硬盤到內(nèi)存的流操作,zf.open實現(xiàn)了從壓縮文件到csv文件的流操作,io.StringIO封裝了對字符串的流。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/41576.html
摘要:阿里聚安全的應(yīng)用漏洞掃描服務(wù),可以檢測出應(yīng)用的文件目錄遍歷風(fēng)險。阿里聚安全對開發(fā)者建議對重要的壓縮包文件進(jìn)行數(shù)字簽名校驗,校驗通過才進(jìn)行解壓。 1、ZIP文件目錄遍歷簡介 因為ZIP壓縮包文件中允許存在../的字符串,攻擊者可以利用多個../在解壓時改變ZIP包中某個文件的存放位置,覆蓋掉應(yīng)用原有的文件。如果被覆蓋掉的文件是動態(tài)鏈接so、dex或者odex文件,輕則產(chǎn)生本地拒絕服務(wù)漏洞...
摘要:同時無論在哪種平臺上,都可以用進(jìn)行系統(tǒng)編程。這樣導(dǎo)入模塊并使用生成隨機(jī)數(shù)中的模塊提供了生成隨機(jī)數(shù)的函數(shù)。生成的隨機(jī)數(shù)介于和之間。可以從自己定義的范圍中生成一個隨機(jī)數(shù),如下所示操作日期和時間你可以從日期中提取所需的值,如下所示。 翻譯:瘋狂的技術(shù)宅https://likegeeks.com/python-... 本文首發(fā)微信公眾號:前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 ...
閱讀 3181·2019-08-30 15:56
閱讀 1302·2019-08-29 15:20
閱讀 1637·2019-08-29 13:19
閱讀 1572·2019-08-29 13:10
閱讀 3453·2019-08-26 18:27
閱讀 3126·2019-08-26 11:46
閱讀 2304·2019-08-26 11:45
閱讀 3945·2019-08-26 10:12