【问题标题】:Error while writing unicode data to file将 unicode 数据写入文件时出错
【发布时间】:2013-04-04 14:40:21
【问题描述】:

我正在尝试将 unicode 数据(实际数据包含德语字符)写入文件,但出现错误:

Traceback (most recent call last):
  File "C:\Python27\extract_osm_road_nw.py", line 76, in <module>
    file.write(str(list_way_id[index][2][i][1]))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 12: ordinal not in range(128)

代码是:

## writing the data in a file
## The data format is:
## A list of: [tuple(way ref id,list[tuple(node id, lat, long)],list[tuple(key,value)]),.....]
## For example: [(u'72439830', [(u'298094414', u'52.4626304', u'10.5579578'), (u'860126050', u'52.4626762', u'10.5576574')], [(u'name', u'General-BeckStra\xdfe')]),.....]

with codecs.open("extracted_osm_file.csv", "w", encoding="utf-8") as file:
    for index in range(len(list_way_id)):
        file.write("Way ID Ref No: ")
        file.write(str(list_way_id[index][0]))## points to the way id ref no
        file.write("\n")
        file.write("Node reference id, latitude, longitude: ")
        file.write("\n")
        for i in range(len(list_way_id[index][1])):
            file.write(str(list_way_id[index][1][i][0]))
            file.write(",")
            file.write(str(list_way_id[index][1][i][1]))
            file.write(",")
            file.write(str(list_way_id[index][1][i][2]))
            file.write("\n")
        for i in range(len(list_way_id[index][2])):
            file.write(str(list_way_id[index][2][i][0]))
            file.write(",")
            file.write(str(list_way_id[index][2][i][1]))
            file.write("\n")
    file.close()

【问题讨论】:

标签: unicode python-2.7 writetofile


【解决方案1】:

删除对str() 的调用。这些尝试使用默认的 ASCII 编码将您拥有的 unicode 数据转换为字节码。

您可能想在这里使用csv 模块,免去编写所有这些逗号的痛苦,但如果您不能,至少要正确使用循环:

with codecs.open("extracted_osm_file.csv", "w", encoding="utf-8") as fileobj:
    for line in list_way_id:
        fileobj.write(u'Way ID Ref No: {}\n'.format(line[0]))
        fileobj.write(u'Node reference id, latitude, longitude: \n')
        fileobj.write(u'\n'.join([u','.join(subentry)
            for entry in line[1:] for subentry in entry]))

对于您的部分示例,它会写:

Way ID Ref No: 72439830
Node reference id, latitude, longitude: 
298094414,52.4626304,10.5579578
860126050,52.4626762,10.5576574
name,General-BeckStra\xc3\x9fe

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2011-12-30
  • 2018-01-28
相关资源
最近更新 更多