我编写了一个基本程序,用于将CSV边缘列表加载到网络中,为网络中的每个节点计算4个度量标准,并将结果写入CSV文件。我正在使用NetworkX
,当使用数字作为节点ID时,一切正常。但是,当我转向使用Twitter用户名作为节点ID的另一个示例时,我收到以下错误:
错误
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 23-24: invalid continuation byte
代码
import sys
import networkx as nx
import csv
# load CSV edgelist into NetworkX
G = nx.read_edgelist(sys.argv[1], delimiter=',')
# calculate centrality metrics
degree = nx.degree_centrality(G)
between = nx.betweenness_centrality(G)
close = nx.closeness_centrality(G)
eigen = nx.eigenvector_centrality(G)
# write centrality results to a list
centrality = []
for i in G:
row = i, degree[i], between[i], close[i], eigen[i]
centrality.append(row)
# write list to CSV
outfile = sys.argv[1].replace('.csv', '_metrics.csv')
header = 'NodeID', 'Degree', 'Betweenness', 'Closeness', 'Eigenvector'
with open(outfile, 'wb') as f:
csv.writer(f).writerow(header)
csv.writer(f).writerows(centrality)
答案 0 :(得分:1)
如果您想快速修复并且您不知道文件的字符编码为什么,那么我会执行以下操作。我会使用谷歌文档确保该文件中的每个字符都是UTF-8
。
以下是:
这是我将csv中的每个字符快速编码为utf-8
的过程。显然有很多次它不是正确答案而且you'll want to understand character encoding;但如果你想要的是操纵文件中的数据而不是一次处理数小时的编码问题,那么我发现Google Drive是最快,最可靠的解决方案。
注意:归功于this answer最初启用此解决方案。