2020年10月23日 星期五

csv的大坑

最近在弄產生csv檔給網頁使用者下載,才發現原來csv在處理中文的坑這麼多。趕快寫下來,不要重蹈覆轍了。

目標:讓使用者下載csv,且可以直接用Excel編輯,而不出現亂碼。


首先,把資料從資料庫裡面撈出來的時候,格式通常不會有問題。
所以只要
data = Data.objects.filter(name__icontains=Liang)
data_list = []
for i in data:
   data_list.append(i.name)
data_list.append(一些中文)
在寫入的時候,要使用utf_8_sig
with open('foo.csv', 'w', newline='', encoding='utf_8_sig') as f:
    writer  = csv.writer(f, delimiter=',')
    writer.writerow(data_list)

而提供檔案的時候:
def fake_view(request):
    file = open('foo.csv', 'r', encoding='utf-8')
    response = HttpResponse(file)
    response ['Content-Type'] ='application/octet-stream'
    response['Content-Disposition'] = 'attachment; filename="<The file name you want the user to have>" '
    return response 

2020年10月1日 星期四

Json常用指令

 當跟數據科學家合作案件,常常是用json傳遞資料。我們如果從資料庫拉資料出來,也常常是dictionary格式。

這裡梁哥整理一下平常常用的指令,作為一個cheat sheet。

假設出現json.decoder.JSONDecodeError:  Expecting property name enclosed in double quotes

你就需要將單引號換成雙引號,

str = str.replace("  \' ", "  \"  ")


如果需要轉成dictionary,就要搭配json.loads()

dictionary = json.loads(str)