【问题标题】:Why does my first element in readlines() of a CSV have additional characters? [duplicate]为什么我在 CSV 的 readlines() 中的第一个元素有额外的字符? [复制]
【发布时间】:2018-04-10 22:47:24
【问题描述】:

我运行以下 python 代码来打开一个 CSV,第一个元素中有一些额外的字符,当我在文本编辑器中查看 CSV 时不存在这些字符,比如 Notepad++。

priorities_file = open('priorities.txt', 'r')
print('Name of the file: ', priorities_file.name)

p = priorities_file.readlines()
print('Read Line: %s' % (p))

输出如下所示:

Name of the file:  priorities.txt    
Read Line: ['Autonomy\n', 'Travel\n',...

我了解'\n' 以及如何从每个元素中删除它,但我不明白为什么元素'Autonomy' 前面有附加字符。谁能告诉我这是为什么?删除那些我真的找不到如何复制的字符的方法的奖励积分。

【问题讨论】:

  • stackoverflow.com/questions/20848761/… 。看起来不错的讨论
  • 如果这只是在第一行,那么它就是那个问题的精确副本(尽管我很确定我们有一个更好的问题,有一个实际的答案)。如果它在每一行上,正确的答案会更复杂一些。无论哪种方式,理想的 解决方案是更改 CSV 文件的创建方式,以首先不使用虚假 BOM。您是在创建文件,还是给您一些您无法控制的东西?
  • 对于重复的问题,您可能想使用lightswitch05's answer,而不是接受的更复杂的问题。
  • 这个特定的文件是使用 Excel 创建的,所以可能与它有关。老实说,我可以从编码的工作原理中学到很多东西。我无法告诉你 UTF-8 或 UTF-16 之间的区别。

标签: python list csv readlines


【解决方案1】:

repr() 会有所帮助。 (在 Python 3.X 上;使用 ascii() 代替)。

p = priorities_file.readlines()
print(repr(p))

我的预感是 csv 文件中的编码实际上不是 ASCII 或 UTF8?

更新:

这应该可以解决问题:

p = p.decode("utf-8-sig")

【讨论】:

  • 首先,这是评论,而不是答案。其次,这是一个 UTF-8 BOM,所以文件的其余部分几乎可以肯定是 UTF-8。
  • 感谢您对回复进行监管。很抱歉试图提供帮助,我将立即停止并停止,以免造成更多伤害。
  • 我使用 Excel 创建了文件,所以我猜测 Excel 以一种我完全不知道的特定方式对其进行编码。 :)
  • p = p.decode("utf-8-sig") 将解决他的问题......所以它实际上是一个答案......而且我认为它没有成功解码的建议是事实.它只是以问题形式作为对话元素进行陈述。无论如何,我的解决方案解决了帖子中的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 2013-04-08
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
相关资源
最近更新 更多