Python 从zip存档(zipfile)解析内存中的csv文件
我正在开发一个新的库,它允许用户将任何文件(Python 从zip存档(zipfile)解析内存中的csv文件,python,python-2.7,csv,zipfile,Python,Python 2.7,Csv,Zipfile,我正在开发一个新的库,它允许用户将任何文件(xlsx,csv,json,tar,zip,txt)解析为生成器 现在我陷入了zip存档,当我试图从中解析csv时,我得到了 io.UnsupportedOperation:在元素查找(0)之后立即查找。csv文件是一个简单的4x4行和列文件。如果我使用csv\u解析器分析csv,我得到了我想要的,但试图从zip存档解析它…轰。错误 with open("/Users/ro/Downloads/archive_file/csv.zip", 'r') a
xlsx
,csv
,json
,tar
,zip
,txt
)解析为生成器
现在我陷入了zip
存档,当我试图从中解析csv
时,我得到了
io.UnsupportedOperation:在元素查找(0)
之后立即查找。csv
文件是一个简单的4x4行和列文件。如果我使用csv\u解析器分析csv
,我得到了我想要的,但试图从zip存档解析它…轰。错误
with open("/Users/ro/Downloads/archive_file/csv.zip", 'r') as my_file_file:
asd = parse_zip(my_file_file)
print asd
其中parse_-zip
是:
def parse_zip(element):
"""Function for manipulating zip files"""
try:
my_zip = zipfile.ZipFile(element, 'r')
except zipfile.BadZipfile:
raise err.NestedArchives(element)
else:
my_file = my_zip.open('corect_csv.csv')
# print my_file
my_mime = csv_tsv_parser.parse_csv_tsv(my_file)
print list(my_mime)
def _csv_tsv_parser(element):
"""Helper function for csv and tsv files that return an generator"""
for row in element:
if any(s for s in row):
yield row
def parse_csv_tsv(elem):
"""Function for manipulating all the csv files"""
dialect = csv.Sniffer().sniff(elem.readline())
elem.seek(0)
data_file = csv.reader(elem, dialect)
read_data = _csv_tsv_parser(data_file)
yield '', read_data
和parse_cvs_tsv
是:
def parse_zip(element):
"""Function for manipulating zip files"""
try:
my_zip = zipfile.ZipFile(element, 'r')
except zipfile.BadZipfile:
raise err.NestedArchives(element)
else:
my_file = my_zip.open('corect_csv.csv')
# print my_file
my_mime = csv_tsv_parser.parse_csv_tsv(my_file)
print list(my_mime)
def _csv_tsv_parser(element):
"""Helper function for csv and tsv files that return an generator"""
for row in element:
if any(s for s in row):
yield row
def parse_csv_tsv(elem):
"""Function for manipulating all the csv files"""
dialect = csv.Sniffer().sniff(elem.readline())
elem.seek(0)
data_file = csv.reader(elem, dialect)
read_data = _csv_tsv_parser(data_file)
yield '', read_data
我错在哪里?我打开文件的方式是正确的还是 返回继承自的类似文件的对象io.BuffereDiabase
不支持seek
(只有io
模块中的文本流支持seek
),因此出现异常
但是,ZipExtFile
确实提供了一种方法,该方法将在不移动文件指针的情况下返回一定数量的字节。如此变化
dialect = csv.Sniffer().sniff(elem.readline())
elem.seek(0)
到
解决此问题。返回继承自的类似文件的对象io.BuffereDiabase
不支持seek
(只有io
模块中的文本流支持seek
),因此出现异常
但是,ZipExtFile
确实提供了一种方法,该方法将在不移动文件指针的情况下返回一定数量的字节。如此变化
dialect = csv.Sniffer().sniff(elem.readline())
elem.seek(0)
到
解决了这个问题