91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python django下載大的csv文件實現方法分析

發布時間:2020-10-03 22:27:39 來源:腳本之家 閱讀:140 作者:zhaozhi406 欄目:開發技術

本文實例講述了python django下載大的csv文件實現方法。分享給大家供大家參考,具體如下:

接手他人項目,第一個要優化的點是導出csv的功能,而且要支持比較多的數據導出,以前用php實現過,直接寫入php://output就行了,django怎么做呢?如下:

借助django的StreamingHttpResponse和python的generator

def outputCSV(rows, fname="output.csv", headers=None):
  def getContent(fileObj):
    fileObj.seek(0)
    data = fileObj.read()
    fileObj.seek(0)
    fileObj.truncate()
    return data
  def genCSV(rows, headers):
    # 準備輸出
    output = cStringIO.StringIO()
    # 寫BOM
    output.write(bytearray([0xFF, 0xFE]))
    if headers != None and isinstance(headers, list):
      headers = codecs.encode("\t".join(headers) + "\n", "utf-16le")
      output.write(headers)
      yield getContent(output)
    for row in rows:
      rowData = codecs.encode("\t".join(row) + "\n", "utf-16le")
      output.write(rowData)
      yield getContent(output) #因為StreamingHttpResponse需要一個Iterator
    output.close()
  resp = StreamingHttpResponse(genCSV(rows, headers))
  resp["Content-Type"] = "application/vnd.ms-excel; charset=utf-16le"
  resp["Content-Type"] = "application/octet-stream"
  resp["Content-Disposition"] = "attachment;filename=" + fname
  resp["Content-Transfer-Encoding"] = "binary"
  return resp

假設遍歷結果集的代碼如下:

headers = ["col1", "col2", ..., "coln"]
def genRows():
      for obj in objList:
        yield [obj.col1, obj.col2, ...obj.coln]   
#這樣調用,返回response
return outputCSV(genRows(), "file.csv", headers)

有人可能會問,為什么不用python自帶的csv.writer?因為生成的csv兼容不太好啊,關于csv的兼容性,可以看前面這篇避免UTF-8的csv文件打開中文出現亂碼的方法。

參考:http://stackoverflow.com/questions/5146539/streaming-a-csv-file-in-django

希望本文所述對大家基于Django框架的Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沂源县| 循化| 宁晋县| 玛曲县| 临潭县| 普兰店市| 仪陇县| 西宁市| 大城县| 德惠市| 鄯善县| 古丈县| 衡阳市| 华亭县| 泰兴市| 株洲市| 张掖市| 长海县| 洞头县| 陆丰市| 阳山县| 盐亭县| 息烽县| 天全县| 清水县| 永靖县| 靖远县| 嘉义市| 平罗县| 和田市| 五莲县| 南昌市| 论坛| 渝中区| 理塘县| 米脂县| 布拖县| 满城县| 永春县| 本溪| 徐闻县|