【问题标题】:Ignoring certain characters while looping through CSV rows循环遍历 CSV 行时忽略某些字符
【发布时间】:2017-03-29 14:52:18
【问题描述】:

使用此代码尝试打印 csv 中的每一行:

import csv

f = open('export.csv')
csv_f = csvkit.reader(f)

for row in csv_f:
    print(row)

很遗憾,csv 文件在多行中包含字符 ®,这会导致以下错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\xae' in position 27: character maps to <undefined>

我已经搜索了类似问题的其他答案,并尝试使用不同的编码,但不幸的是,我无法完全理解它以使其工作。 CSV 文件似乎是 UTF-8 格式,或者至少当我在 Windows 中打开文件时 OpenOffice Calc 是这样说的。

我有什么方法可以在“忽略” ® 字符的同时打印行以便不返回错误?任何替代解决方案也将不胜感激。

【问题讨论】:

  • 为我工作。你可以试试print([x.decode("latin-1") for x in row]) 吗?
  • 我收到AttributeError: 'str' object has no attribute 'decode'
  • 对不起。 print([x.encode("latin-1") for x in row])
  • 听起来像是 Windows 控制台错误:stackoverflow.com/questions/14284269/…
  • 零比雷埃夫斯 - 这确实是一个 Windows 控制台错误。我将代码页切换到 65001(Windows 控制台中的chcp 65001),然后运行脚本 - 运行良好。谢谢您的帮助。 (其他人请注意:每次重新启动 Windows 控制台时,您都需要再次运行此命令。)

标签: python-3.x


【解决方案1】:

如果你想过滤一些“不可打印/奇怪”的字符,你可以这样做:

row = ["aaaaa \xae bbbbb","foo"]

filtered_row = ["".join(c if ord(c)<128 else "." for c in s) for s in row]
print(filtered_row)

结果(所有奇怪的字符都被点代替了):

['aaaaa . bbbbb', 'foo']

【讨论】:

    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2022-11-20
    • 2012-07-28
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多