Python以unicode编码格式读入外部文件

使用Python模块codecs,将外部文件以unicode格式读入,免去乱码的烦恼。

1. 问题描述

我用NetworkX创建一张图,顶点和边数据从外部文件读入(顶点名称包含一些法语字符),接着用matplotlib将图保存成一张图片,并显示节点名称(nx.draw_networkx_labels)。运行Python程序,提示如下错误:

ValueError: matplotlib display text must have all code points < 128 or use Unicode strings

2. 解决方法

使用Python模块codecs,将文件以utf8的格式读入,主要源代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import codecs # for utf8

# codecs.open(filename, mode='r', encoding=None, errors='strict', buffering=1)
with codecs.open(filename, mode='r', encoding='utf-8') as f :  # with open(filename) as f:

# 作图
node_labels = nx.get_node_attributes(G, 'name')   # Node labels in a dictionary keyed by node of text labels   
nx.draw_networkx_labels(G,pos=pos,labels=node_labels,font_size=16)

养成这个习惯,可以省去很多事。

3. 关于codecs

关于codecs,官方文档介绍在这里,摘抄部分如下:

This module defines base classes for standard Python codecs (encoders and decoders) and provides access to the internal Python codec registry, which manages the codec and error handling lookup process.

Python内建的编码格式,可以查看官方文档Standard Encodings

发表评论

电子邮件地址不会被公开。 必填项已用*标注