【发布时间】:2019-05-18 07:29:39
【问题描述】:
我有以下数据,它使用\x01 作为字段分隔符,\x02\n 作为行分隔符。以下是数据示例:
#export_date\x01artist_id\x01name\x01is_actual_artist\x01view_url\x01artist_type_id\x02\n#primaryKey:artist_id\x02\n
#dbTypes:BIGINT\x01INTEGER\x01VARCHAR(1000)\x01BOOLEAN\x01VARCHAR(1000)\x01INTEGER\x02\n#exportMode:INCREMENTAL\x02\n
1475226000146\x011120695691\x01Kinitic SA\x011\x01http://itunes.apple.com/artist/kinitic-sa/id1120695691?uo=5\x017\x02\n
但是,当我尝试使用 csv 模块解析它时,我得到了以下结果:
with open('myfile', 'r') as csvfile:
dialect = csv.Sniffer().sniff(csvfile.read(1024))
print(dialect.__dict__)
mappingproxy({'module': 'csv', '_name': 'sniffed', 'lineterminator': '\r\n', 'quoting': 0, ' doc': None, 'doublequote': False, 'delimiter': ' ', 'quotechar': '"', 'skipinitialspace': False})
不幸的是,这是错误的,因为它认为分隔符是一个空格(即使我增加缓冲区大小也是错误的)。
有没有比使用那个模块更准确的方法来确定分隔符和行终止符?
【问题讨论】:
-
嗅探器启发式可能不会扩展到那些奇怪的分隔符。检查源代码,默认为
self.preferred = [',', '\t', ';', ' ', ':'] -
sniff采用可选的delimiters参数,一个包含所有可能分隔符的字符串。您是否尝试过,在您的情况下使用是否可行? -
如果你知道分隔符是什么,你为什么要嗅探文件?
-
@cody -- 我想。是否有类似所有可能分隔符的列表?不幸的是,我将它用于很多分隔符,我不确定哪些是实际合法的分隔符,哪些不是。
-
使用您的数据,
\x01出现 15 次,但t出现 20 次。如果没有更多信息,我们如何知道它是哪个分隔符?您需要更多关于分隔符和行终止符的信息,否则无法回答
标签: python python-3.x csv