python - 如何在python中生成文件而不将其保存到磁盘?

标签 python django csv

我正在使用 Python 2.7 和 Django 1.7。

我的管理界面中有一个方法可以生成某种 csv 文件。

def generate_csv(args):
    ...
    #some code that generates a dictionary to be written as csv
    ....

    # this creates a directory and returns its filepath
    dirname = create_csv_dir('stock')

    csvpath = os.path.join(dirname, 'mycsv_file.csv')
    fieldnames = [#some field names]

    # this function creates the csv file in the directory shown by the csvpath
    newcsv(data, csvheader, csvpath, fieldnames)

    # this automatically starts a download from that directory
    return HttpResponseRedirect('/media/csv/stock/%s' % csvfile)

总而言之,我创建了一个 csv 文件,将其保存在磁盘上的某个位置,然后将其 URL 传递给用户以供下载。

我在想是否所有这些都可以在不写入光盘的情况下完成。我在谷歌上搜索了一下,也许内容处置附件可能对我有帮助,但我有点迷失在文档中。

无论如何,如果有更简单的方法,我很想知道。

最佳答案

感谢@Ragora,您为我指明了正确的方向。

我重写了newcsv方法:

from io import StringIO
import csv


def newcsv(data, csvheader, fieldnames):
    """
    Create a new csv file that represents generated data.
    """
    new_csvfile = StringIO.StringIO()
    wr = csv.writer(new_csvfile, quoting=csv.QUOTE_ALL)
    wr.writerow(csvheader)
    wr = csv.DictWriter(new_csvfile, fieldnames = fieldnames)

    for key in data.keys():
        wr.writerow(data[key])

    return new_csvfile

在管理员中:

csvfile = newcsv(data, csvheader, fieldnames)

response = HttpResponse(csvfile.getvalue(), content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=stock.csv'
return response

关于python - 如何在python中生成文件而不将其保存到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32634559/

相关文章:

django - 在 Django 中使用动态选择字段

Python - 比较两个不同 csv 中两列中的相似值

python - SyntaxError : invalid syntax on lib/python3. 8/site-packages/sql_server/pyodbc/base.py django 在 Linux 上部署

python - Scrapy上传文件

python - 读取大型 csv 文件的随机行、python、pandas

python - 如何在 python 2.6 中处理特定行之后的数据?

python - 将模板分成几个部分并包含每个部分不好吗?

javascript - 如何解析 multer 返回的 javascript 对象?

c - 在 C 中解析 CSV 文件

python - 扁平化Python中的嵌套字符串列表