Python 如何从csv返回一个生成的行?
我希望使用以下方法从大型数组(来自数据库)到浏览器(带Flask)生成结果: 我想使用Python 如何从csv返回一个生成的行?,python,csv,Python,Csv,我希望使用以下方法从大型数组(来自数据库)到浏览器(带Flask)生成结果: 我想使用csv包,而不是自己生成csv(加入“,”,添加特征线) 现在,我发现只返回一行的唯一方法是执行以下操作: @app.route('/large.csv') def generate_large_csv(): def generate(): for row in iter_all_rows(): dest = io.StringIO() w
csv
包,而不是自己生成csv(加入“,”,添加特征线)
现在,我发现只返回一行的唯一方法是执行以下操作:
@app.route('/large.csv')
def generate_large_csv():
def generate():
for row in iter_all_rows():
dest = io.StringIO()
writer = csv.writer(dest)
writer.writerow(row)
yield dest.getvalue()
return Response(generate(), mimetype='text/csv')
但是为每一行创建一个新的io.StringIO
&csv.writer
似乎根本不正确
我查看了包的名称,但找不到只返回一行的内容。您可以使用自定义文件对象轻松访问它。如果您使用
write
方法创建一个对象,该方法仅存储其输入并将其提供给csv编写器,则完成以下操作:
class keep_writer:
def write(self, txt):
self.txt = txt
@app.route('/large.csv')
def generate_large_csv():
def generate():
kw = keep_writer()
wr = csv.writer(kw) # add optional configuration for the csv.writer
for row in iter_all_rows():
wr.writerow(row) # just write the row
yield kw.txt # and yield the line build by the csv.writer
return Response(generate(), mimetype='text/csv')
你想要的csv是静态的还是动态的?我不太明白你的问题;
行
是数据库的结果。它可以包含0行,最多可包含数百万行。这不是存储在磁盘中的文件。是的,我想我也误解了你的问题,因为你没有提到来源。所以我想知道你想要流的内容是静态的还是动态的。我问这个问题的原因是,如果内容是静态的,您可以选择不使用flask,而是通过web服务器(如NginxYes)来流。当然,如果内容是静态的,我会这样做:)我更新了这个问题,使其更精确、更简洁、更聪明,并且完全符合我的需要,谢谢:)
class keep_writer:
def write(self, txt):
self.txt = txt
@app.route('/large.csv')
def generate_large_csv():
def generate():
kw = keep_writer()
wr = csv.writer(kw) # add optional configuration for the csv.writer
for row in iter_all_rows():
wr.writerow(row) # just write the row
yield kw.txt # and yield the line build by the csv.writer
return Response(generate(), mimetype='text/csv')