2017-02-09 86 views
0

我一直在使用osmnx一個項目並試圖生成的類型的字典導出到使用Python 3使用下面的代碼CSV:轉換存儲爲一個字符串字典,以字節

with open('dict.csv', 'wb') as csv_file: 
    writer = csv.writer(csv_file) 
    for key, value in mydict.items(): 
     writer.writerow([key, value]) 

不幸的是,我收到了錯誤:

a bytes-like object is required, not 'str' 

被生成字典的代碼是:

mydict = {num:list(streets_per_node.values()).count(num) for num in range(max(streets_per_node.values()) + 1)} 

我試圖尋找解決方案,但是我擔心答案要麼太簡單,要麼就是在典型的教程中找不到。

+0

什麼是'streets_per_node.values()'? – MooingRawr

+0

@MooingRawr這是一系列osmnx計算的結果。簡而言之,它是從networkx多重圖形生成的計數。該代碼是長的,但其產生的最終的dict相關代碼是: '邊緣= non_self_loop_edges + self_loop_edges' 'edges_flat =列表(chain.from_iterable(邊緣))'' 計數=計數器(edges_flat)'' streets_per_node = {node:nodes [node]爲節點中的節點}' 邊緣是一個圖論的術語,在這種情況下,是指街道,節點是交叉點。完整的代碼從這裏的第330行開始:https://github.com/gboeing/osmnx/blob/master/osmnx/stats.py –

回答

2

open('dict.csv', 'wb')告訴Python你想打開文件寫字節,而不是文本,這就是爲什麼你得到這個錯誤。只需省略b,它應該可以工作。

請參閱:https://docs.python.org/3/library/csv.html#examples

+0

提供'encoding'也是一個好主意,以確保跨平臺的文件編碼是一致的(Pre Py3.6) –

+0

@tzaman就是這樣。這太簡單了,謝謝。 –