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)

解决了这个问题