【发布时间】: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