【问题标题】:Convert xls to csv and create/update InMemoryUploadedFile Django将 xls 转换为 csv 并创建/更新 InMemoryUploadedFile Django
【发布时间】:2015-01-27 15:11:58
【问题描述】:

我正在使用 python 的 xlrd 和 csv 将 xls 解析为 csv。当用户上传 xls 或 xlsx 文件时,我能够解析并生成 csv。虽然它生成实际文件,但我想更新或创建新的 InMemoryUploadFile 对象,我可以使用它来创建带有 FileField 对象的记录。有什么办法吗?我试图寻找示例,尽管大多数示例都是针对 InMemoryUploadFile 的图像文件。

这是我尝试过的示例代码 -

    import csv
    import xlrd
    import StringIO
    from django.core.files.uploadedfile import InMemoryUploadedFile        
    .......
    .......

    #xls_file is excel file
    file_name = '%s.csv'%(xls_file.name)
    workbook = xlrd.open_workbook(file_contents=xls_file.read())
    all_worksheets = workbook.sheet_names()

    # for now starting with reading the first sheet
    worksheet_name = all_worksheets[0]
    worksheet = workbook.sheet_by_name(worksheet_name)

    csv_output = StringIO.StringIO()
    csv_data = []
    for rownum in xrange(worksheet.nrows):
        csv_data.append(
            [unicode(
                entry).encode("utf-8") for entry in worksheet.row_values(
                rownum)])
    writer = csv.writer(csv_output)
    for row in csv_data:
        writer.writerow(csv_data)

    csv_file = InMemoryUploadedFile(writer, None, file_name, 'text/csv',
                              None, 'utf-8')
    return csv_file

【问题讨论】:

    标签: python django excel csv xlrd


    【解决方案1】:

    您可以尝试改用 ContentFile 吗?

    from django.core.files.base import ContentFile
    def save_file(csv_output):
        mymodel = MyModel.objects.get(id=1)
        file_content = ContentFile(csv_output.getvalue())
        mymodel.myfilefield.save(request.FILES['yourupload'].name, file_content)
    

    【讨论】:

    • 原教程的链接失效了。
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2010-10-05
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多