最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python django下載大的csv文件實現(xiàn)方法分析

 更新時間:2019年07月19日 11:41:35   作者:zhaozhi406  
這篇文章主要介紹了python django下載大的csv文件實現(xiàn)方法,結(jié)合實例形式分析了Django框架下載csv大文件的相關(guān)操作技巧與注意事項,需要的朋友可以參考下

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

接手他人項目,第一個要優(yōu)化的點是導(dǎo)出csv的功能,而且要支持比較多的數(shù)據(jù)導(dǎo)出,以前用php實現(xiàn)過,直接寫入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):
    # 準(zhǔn)備輸出
    output = cStringIO.StringIO()
    # 寫B(tài)OM
    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

假設(shè)遍歷結(jié)果集的代碼如下:

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

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

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

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

相關(guān)文章

  • 在Pycharm中對代碼進行注釋和縮進的方法詳解

    在Pycharm中對代碼進行注釋和縮進的方法詳解

    今天小編就為大家分享一篇在Pycharm中對代碼進行注釋和縮進的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python正則表達式教程之二:捕獲篇

    Python正則表達式教程之二:捕獲篇

    什么是捕獲呢?使用小括號指定一個子表達式后,匹配這個子表達式的文本(即匹配的內(nèi)容)可以在表達式或者其他過程中接著用,下面這篇文章就主要介紹了Python正則表達式中關(guān)于捕獲的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • Python中位運算的詳細用法教程

    Python中位運算的詳細用法教程

    在Python中,位運算是一種對二進制數(shù)進行操作的運算方式,它們直接對二進制位進行操作,而不考慮這些位所表示的實際值,本文將詳細介紹Python中的位運算符,需要的朋友可以參考下
    2024-08-08
  • Python 中 list 的各項操作技巧

    Python 中 list 的各項操作技巧

    最近在學(xué)習(xí) python 語言。大致學(xué)習(xí)了 python 的基礎(chǔ)語法。覺得 python 在數(shù)據(jù)處理中的地位和它的 list 操作密不可分,今天把相關(guān)基礎(chǔ)操作記錄到腳本之家平臺,需要的的朋友參考下
    2017-04-04
  • python字典各式各樣操作從基礎(chǔ)到高級全面示例詳解

    python字典各式各樣操作從基礎(chǔ)到高級全面示例詳解

    在Python中,字典(Dictionary)是一種強大而靈活的數(shù)據(jù)結(jié)構(gòu),它允許你存儲和檢索鍵值對,本文將深入探討Python中各式各樣的字典操作,包括基本操作、高級操作以及一些實用的技巧,通過全面的示例代碼,將展示如何充分發(fā)揮字典在Python編程中的優(yōu)勢
    2023-12-12
  • 如何用python做逐步回歸

    如何用python做逐步回歸

    這篇文章主要介紹了如何用python 做逐步回歸,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • python數(shù)據(jù)類型的詳細分析(附示例代碼)

    python數(shù)據(jù)類型的詳細分析(附示例代碼)

    這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)類型分析的相關(guān)資料,python里可以通過type()函數(shù)來查看數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • Python通過psd-tools解析PSD文件

    Python通過psd-tools解析PSD文件

    這篇文章主要介紹了Python通過psd-tools解析PSD文件,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Python判斷對象是否相等及eq函數(shù)的講解

    Python判斷對象是否相等及eq函數(shù)的講解

    今天小編就為大家分享一篇關(guān)于Python判斷對象是否相等及eq函數(shù)的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 一文帶你解決Python中的所有報錯

    一文帶你解決Python中的所有報錯

    使用Python進行代碼編程的時候,難免會遇到代碼報錯,不僅僅是新手小白會遇到,就是很多編程大神也是經(jīng)常出現(xiàn)BUG的,下面這篇文章主要給大家介紹了關(guān)于解決Python中所有報錯的相關(guān)資料,需要的朋友可以參考下
    2023-03-03

最新評論

东阳市| 西华县| 巴中市| 府谷县| 兴义市| 齐齐哈尔市| 荣昌县| 麻栗坡县| 盐津县| 苏尼特右旗| 平远县| 珲春市| 且末县| 花垣县| 满洲里市| 东宁县| 五华县| 广宁县| 昭平县| 库尔勒市| 静乐县| 承德市| 广宗县| 南通市| 台东市| 陇川县| 万载县| 集安市| 泽普县| 云南省| 五指山市| 江阴市| 安多县| 璧山县| 杭锦后旗| 金塔县| 德化县| 阜南县| 平南县| 五莲县| 合肥市|