從CSV

2016-10-20 32 views
1

解碼丹麥字符的Django視圖我有一個包含一些奇怪的(不正確的)編碼的丹麥字符(A-O-℃)csv文件。在我的Django視圖中,我試圖從第一行抓取一個字符串,並從文件的第二行抓取日期。該文件看起來像這樣,如果我複製粘貼它。從CSV

01,01,Project Name: SAM_LOGIK_rsm¿de_HD,,,Statistics as of: Sat Oct 01 17:09:16 2016 
02,01,Project created: Tue Apr 12 09:10:16 2016,,,Last Session Started: Sat Oct 01 16:59:22 2016 

字符串SAM_LOGIK_rsm¿de_HD應該SAM_LOGIK_Årsmøde_HD - 這是我想在數據庫存儲的值。

我解碼與ISO-8859-1的文件(否則我得到一個錯誤)。

with open(latest, 'rt', encoding='iso-8859-1') as csvfile: 
     for i, row in enumerate(csvfile): 
      if "Project Name:" in row: 
       this = row.split(',') 
       project_list.append(this[2][14:]) # gets the project name as is 
       if i >= 1: 
        break 
      else: 
       this = row.split(',') 
       date = datetime.strptime(this[5][22:-1], '%c') # datetime object 
       project_list.append(date) 
       if i >= 1: 
        break # break at row 2 
    csvfile.close() 

該存儲串「是」,我不知道該怎麼把它兌換成丹麥之前,我將它存儲在數據庫中的內容。 DB和Django被設置爲與丹麥字符一起工作。

如果我試圖把它作爲utf.8解碼 - 我得到的UnicodeDecodeError揭示一些更多的信息。

01,01,Project Name: SAM_LOGIK_\x81rsm\xbfde_HD,,,Statistics as of: Sat Oct' 
01 17:09:16 2016\r02,01,Project created: Tue Apr 12 09:10:16 2016,,,Last' 

編輯:

我發現在CSV琴絃實際上是破壞 - 和創建它們(的Avid Media Composer的)至少一貫採用相同的值的應用程序 - A-A- Æ-æ-Ø-ø

Å = \x81 unassigned in UTF8 
å = Œ - u"\u0153" OE ligature 
Æ = ® - chr(174) 
æ = ¾ - chr(190) 
Ø = » - chr(187) 
ø = ¿ - chr(191) 

我修正了這個問題。

replacements = {'\x81':'Å','Œ':'å','®':'Æ','¾':'æ','¿':'ø','»':'Ø'} 
with open(newest, 'rt', encoding='iso-8859-1') as csvfile: 
     for i, row in enumerate(csvfile): 
      if "Project Name:" in row: 
       this = row.split(',') 
       project_list.append("".join([replacements.get(c, c) for c in this[2][14:]])) 
       if i >= 1: 
        break 
      else: 
       this = row.split(',') 
       date = datetime.strptime(this[5][22:-1], '%c') # datetime object 
       project_list.append(date) 
       if i >= 1: 
        break # break at row 2 

回答

1

嘗試

row.decode('iso-8859-1').encode('utf-8')

而且如果你用「with」語句關閉文件是沒有必要的

+0

「海峽」對象有沒有屬性「解碼」 – Xeberdee

+0

Python 3的 然後嘗試 'e_row = row.encode( 'UTF-8')' –

+0

解碼時,這是正確的 - 但問題在我的編輯修改。 – Xeberdee