2017-09-15 31 views
0

我有下面的代碼:商店點綴成csv文件使用python

# -*- coding: utf-8 -*- 
import csv, geocoder 

def extract_address(lat="", lng=""): 
    if lat and lng: 
     g = geocoder.google([lat, lng], method='reverse') 
     if g: 
      if g.street is not None: 
       postal = g.postal 
       housenumber = g.housenumber 
       if g.housenumber is None: 
        housenumber = "" 
       if g.postal is None: 
        postal = "" 
       address = str(g.street.encode("utf-8")) + ", " + str(housenumber.encode("utf-8")) + ", " + str(postal.encode("utf-8")) + " " + str(g.city.encode("utf-8")) + ", " + str(g.country_long.encode("utf-8")) 
       print type(address) 
       return address.decode('utf-8') 

with open('my_prueba.csv', 'w') as t: 
    spamwriter = csv.writer(t, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL, lineterminator='\n') 
    spamwriter.writerow(['st_y', 'st_x', 'Address']) 
    address = extract_address('some_lat', 'some_lng')) 
    print address 
    spamwriter.writerow([str(lat), str(lng), str(address.encode('utf-8'))]) 

這是輸出:

<type 'str'> 
Calle Hernán Cortés, 16, 28004 Madrid, Spain 

但我得到一次我打開CSV文件是這樣的:

enter image description here

我一直想很多事情,閱讀不同的相關stacko verflow的帖子,但沒有...任何人都可以給我這個手?!

在此先感謝!

編輯:我想然後將其轉換爲Excel文件。如果我用另一個應用程序打開csv,則列以另一種我不想要的方式分隔。我上面的代碼給我正確的分隔,當我用Excel打開csv文件時

+0

你看到了什麼,如果你打開CSV用文本編輯器? – roganjosh

+0

您是否嘗試過使用ANSI編碼而不是UTF-8?快速閱讀這裏讓我回答這個問題:http://www.accompa.com/kb/answer.html?answer_id=264 – Jaxi

+0

如果我打開它,請使用'string.encode('ascii','ignore')' –

回答

0

重音存儲在csv文件中。毫無疑問。 這些位對應於utf8編碼的文本。 你需要告訴你csv閱讀器(看起來像MS Excel),它是utf8。

例如用的LibreOffice: enter image description here

+0

只有一個問題,如果我這樣做,最後一列(地址)分開,我的意思是:這個地址「CalleHernánCortés,16,28004 Madrid,Spain」而不是在一個矩形中,被分割爲多個矩形... – wj127

+0

忘記我剛剛說過的@mquantin!我可以得到相同的結果只是選擇「分號」分隔符選項!很多感謝^^ – wj127