我正在尝试通过Falcon中的GET请求发送CSV。我不知道从哪里开始。

下面是我的代码:

class LogCSV(object):
"""CSV generator.

This class responds to  GET methods.
"""
def on_get(self, req, resp):
    """Generates CSV for log."""

    mylist = [
        'one','two','three'
    ]

    myfile = open("testlogcsv.csv", 'w')
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    wr.writerow(mylist)

    resp.status = falcon.HTTP_200
    resp.content_type = 'text/csv'
    resp.body = wr

我不想用汤匙喂食,请告诉我应该阅读/观看的内容以帮助解决此问题。
谢谢

最佳答案

您应该使用 Response.stream 属性。返回之前,必须将其设置为类似文件的对象(带有read()方法的对象)。

因此,首先,您应该将CSV写入此对象,然后将其提供给Falcon。在您的情况下:

resp.content_type = 'text/csv'
# Move the file pointer to the beginning
myfile.seek(0)
resp.stream = myfile

请记住使用seek(0)将文件指针移到开头,以便Falcon可以读取它。

如果您的文件短暂且足够小,可以存储在内存中,则可以使用 BytesIO 之类的内存文件代替普通文件。它的行为类似于普通文件,但从未写入文件系统。
myfile = BytesIO()
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)

...

resp.content_type = 'text/csv'
# Move the file pointer to the beginning
myfile.seek(0)
resp.stream = myfile

;)

10-07 20:34