Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在flask应用程序中提供熊猫数据帧的Zip文件_Python_Csv_Flask_Zip - Fatal编程技术网

Python 在flask应用程序中提供熊猫数据帧的Zip文件

Python 在flask应用程序中提供熊猫数据帧的Zip文件,python,csv,flask,zip,Python,Csv,Flask,Zip,我正在尝试在我的Flask应用程序中返回熊猫数据帧的zip。我有一个视图返回serve_csv函数的输出。这是我拥有的原始serve_csv函数,它成功下载了指定的csv def serve_csv(dataframe,filename): buffer = StringIO.StringIO() dataframe.to_csv(buffer, encoding='utf-8', index=False) buffer.seek(0) return send_f

我正在尝试在我的Flask应用程序中返回熊猫数据帧的zip。我有一个视图返回serve_csv函数的输出。这是我拥有的原始serve_csv函数,它成功下载了指定的csv

def serve_csv(dataframe,filename):
    buffer = StringIO.StringIO()
    dataframe.to_csv(buffer, encoding='utf-8', index=False)
    buffer.seek(0)
    return send_file(buffer,
         attachment_filename=filename,
         mimetype='text/csv')
我试图将其更改为一个serve_zip函数,该函数获取熊猫数据帧列表并返回相应csv文件的zip。但是,我收到一个错误,该错误指出非类型的对象没有len。我猜这与我试图写入缓冲区的方式有关,但在阅读文档后,我不确定如何修复它。以下是我目前的职能:

def serve_zip(data_list,filename):
    '''data_list: a list of pandas data frames
    filename'''
    zipped_file = StringIO.StringIO()
    with zipfile.ZipFile(zipped_file, 'w') as zip:
        for i, dataframe in enumerate(data_list):
            print type(dataframe.to_csv(zipped_file, encoding='utf-8', index=False))
        zip.writestr(filename, dataframe.to_csv(zipped_file, encoding='utf-8', index=False))
    zipped_file.seek(0)
    return send_file(zipped_file,
         attachment_filename=filename,
         mimetype='application/octet-stream')
和我的堆栈跟踪:

Full traceback: 
127.0.0.1 - - [17/Feb/2015 15:57:21] "POST /part2/ HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/.deps/Flask-0.10.1-py2.7.egg/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/.deps/Flask-0.10.1-py2.7.egg/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/.deps/Flask-0.10.1-py2.7.egg/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/.deps/Flask-0.10.1-py2.7.egg/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/.deps/Flask-0.10.1-py2.7.egg/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/.deps/Flask-0.10.1-py2.7.egg/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/.deps/Flask-0.10.1-py2.7.egg/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/.deps/Flask-0.10.1-py2.7.egg/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/webapp.py", line 110, in part2
return serve_zip([table3, agg_table], 'my_file.csv')
  File "/private/var/folders/f4/qr09tm_169n4b9xyjsrjv8680000gn/T/tmpmQ95cJ/webapp.py", line 61, in serve_csv
zip.writestr(filename, dataframe.to_csv(zipped_file, encoding='utf-8', index=False))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 1216, in writestr
zinfo.file_size = len(bytes)            # Uncompressed size
TypeError: object of type 'NoneType' has no len()
127.0.0.1 - - [17/Feb/2015 15:57:21] code 400, message Bad request version ('RTSP/1.0')
127.0.0.1 - - [17/Feb/2015 15:57:21] "GET /info?txtAirPlay&txtRAOP RTSP/1.0" 400 -
127.0.0.1 - - [17/Feb/2015 15:57:21] "GET /part2/?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -
127.0.0.1 - - [17/Feb/2015 15:57:21] "GET /part2/?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 -
127.0.0.1 - - [17/Feb/2015 15:57:21] "GET /part2/?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 -
127.0.0.1 - - [17/Feb/2015 15:57:21] "GET /part2/?__debugger__=yes&cmd=resource&f=ubuntu.ttf HTTP/1.1" 200 -
127.0.0.1 - - [17/Feb/2015 15:57:21] "GET /part2/?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -
127.0.0.1 - - [17/Feb/2015 15:57:21] "GET /part2/?__debugger__=yes&cmd=resource&f=source.png HTTP/1.1" 200 -
127.0.0.1 - - [17/Feb/2015 15:57:21] "GET /part2/?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -

它看起来像是数据帧。如果提供了缓冲区对象,则to_csv不会返回字符串,而是将csv数据写入缓冲区。这不是您想要做的,因为您希望缓冲区中的数据是有效的zip文件。而是传入
None

zip.writestr(filename, dataframe.to_csv(None, encoding='utf-8', index=False))

通过这种方式,zip对象将压缩CSV字符串并将其添加到zip存档(您正在通过
StringIO
在内存中缓冲)。

您能在这里提供完整的回溯吗?是的!继续并添加它。