def export_csv(request):
response = HttpResponse(mimetype = 'text/csv')
response['Content-Disposition'] = 'attachment; filename=exported.csv'
writer = csv.writer(response)
data = [['First-Name','Last-name'],['Foo','baar']]
for entry in data:
writer.writerow(entry)
return response
以上代码用于从django输出csv文件。我面临的问题是导出/输出文件的内容没有显示在csv文件编辑器的不同框中。对于数据(列表)中的每个条目,它将被打印在相同的框中,而不是它应该在不同的框中解释每个条目的值(名字,姓氏)。
csv文件中的实际结果:
|First-Name,Last-Name |
|Foor,bar |
预期:
|First-Name |Last-Name |
|Foo |Baar |
如何获得独立于列表大小及其内容导出文件的机制?
答案 0 :(得分:1)
您可以使用自己的自定义分隔符等为csv.writer设置自己的方言:
class dia2(csv.Dialect):
delimiter = '\t' # delimiter should be only 1-char
quotechar = '"'
escapechar = None
doublequote = True
skipinitialspace = False
lineterminator = '\r\n'
quoting = 1
writer = csv.writer(response, dialect=dia2)
...
不同编辑器出现问题的主要原因是不同的行为 - 您应该在每个编辑器本身中正确地将CSV分隔符设置为您真正使用的行。还有一个可能的原因 - 你不使用每个CSV值的引用(在方言类中引用= 1)。 根据您的预期输出,您可以期待的另一件事 - 每个字段的长度相同,为其余字段填充空间 - 无法通过csv模块完成,但您可以使用csv模块将数据格式化为相同的长度标准的python格式如:
data[i] = "%10s" % data[i]