【问题标题】:Python csv reader multi-character quotechar?Python csv阅读器多字符quotechar?
【发布时间】:2016-09-14 15:23:54
【问题描述】:

我正在处理 Concordance 加载文件并且必须对其进行编辑,因此我正在使用 Python。列由 pilcrow 字符 分隔,并以 þ 作为引号字符。

问题是quotechar,python中的csv模块只接受单字符引号(我写csv文件时没有问题)。

问题:如何在 Python 中读取引号字符为多字符的 CSV 文件?

CSV 文件示例:

þcol_1þ¶þcol_2þ¶þcol_3þ¶þcol_4þ

【问题讨论】:

  • 你能升级到 Python 3 吗? csv 模块在 2 和 3 中使用 str 类型,而在 Python 3 中,完全支持 Unicode,þ 只是一个代码点。
  • 其实这个文件用的是什么encoding?只有当文件使用多字节编码(像 UTF-8 这样的变量或像 UTF-16 这样的固定)时,Python 2 才会在这里出现问题。如果这是在像 CP1252 这样的 8 位编码 中完成的,那么您只需要使用 '\xb6''\xfe'
  • Python 3 是最干净的解决方案。
  • @AnttiHaapala:实际上,这取决于编码。 LexisNexis(Concordance 的出版商)称其为“ASCII 254”,这是一种专利废话,因为 ASCII 仅达到 127,但这确实表明这是一个 8 位字符。
  • @user3557405:您的 source 编码可能是,但 file 编码是 Latin-1。至少这是我对格式的所有研究告诉我的。

标签: python csv


【解决方案1】:

Concordance 文件格式是 8 位编码的,þ 字符实际上是用 Latin-1 编码的。这意味着它们分别被编码为二进制值 0xB6 和 0xFE。

Python 2 csv 模块非常乐意接受这些字节:

csv.reader(fileobj, delimiter='\xb6', quotechar='\xfe')

csv 模块一样,请确保以二进制模式打开文件以将换行符处理留给模块。

在 Python 3 中,使用 newline=''encoding='latin1' 以文本模式打开文件,并使用上面的 \xhh 转义符或实际字符,因此 delimiter='¶', quotechar='þ'

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 2019-07-08
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多