【发布时间】:2016-07-12 07:25:42
【问题描述】:
我正在尝试使用 csv 模块来解析特定格式的分隔文件。我正在使用 Python 3.5。
格式由第三方提供,我在使用 csv 模块在所有情况下都给出表示时遇到问题。任何指定为文本数据类型的列都有双引号值。日期和数字在管道(分隔符)之间没有任何引号值。问题出现在尝试多种格式时,我要么留下一个中间双引号,要么丢失诸如 \ -> 空格之类的信息。我希望我不必为此使用正则表达式,所以如果有办法使用 csv 模块解决它,那就太好了。
规则:
转义字符是“\”
- 制表符转义:\t
- 换行符:\n
- 反斜杠字符:\\
- 内引号字符:\"
- 分隔符 = |
- 日期没有引号。
- 数字,包括 NaN 值(空管道 ||)没有引号
当我尝试各种方言参数时,我似乎无法正确解析这个 csv 文件。它将反斜杠转换为空格、错误放置内引号等。是否有可能使用 csv 模块,或者我需要进行一些后期处理,还是创建自己的正则表达式?
import csv
import os
dialect_params = {'delimiter': '|'} # help needed here.
newline_sample = '"I went to dinner. \n Then I went to a show."'
quote_sample = '"I read the \"WSJ\", did you?"'
backslash_sample = '"Boasberg\\Wheeler Communications, Inc."'
na_sample = 'N\A'
date_sample = '2013-04-23'
number_sample = '1.3'
text_sample = '|'.join([newline_sample, quote_sample,
backslash_sample, na_sample,
date_sample, number_sample]) + '\n'
csv.reader(iter([text_sample]), **dialect_params)
【问题讨论】:
-
该代码正确吗?看不到
lines已定义。 -
你在哪里说
backspace你的意思是反斜杠吗?我很惊讶您对此有任何问题:默认情况下,csv 格式根本没有特殊的反斜杠。 -
在你的
quote_sample中你真的想要文字\"还是只是一个引号(Python 会给你后者)? -
"引号字符:\n" 真的吗?确定你不是指引号字符:'"'(双引号)?
标签: csv python-3.x python-3.5