Python 如何从csv返回一个生成的行?

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

我希望使用以下方法从大型数组(来自数据库)到浏览器(带Flask)生成结果:

我想使用
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')