【发布时间】:2014-08-07 16:59:19
【问题描述】:
我正在努力根据变量分隔符拆分文本行,并保留空字段和引用的数据。
例子:
1,"2",three,'four, 4',,"6\tsix"
或作为制表符分隔的版本
1\t"2"\tthree\t'four, 4'\t\t"6\tsix"
都应该导致:
['1', '"2"', 'three', 'four, 4', '', "6\tsix"]
到目前为止,我已经尝试过:
使用拆分,但显然没有按需要处理带引号的分隔符。
使用 csv 库的解决方案,但它往往具有引用所有内容或不引用任何内容的选项,而不保留原始引号。
正则表达式,特别是遵循以下答案中的模式,但它会删除空字段:How to split but ignore separators in quoted strings, in python?
-
使用 pyparsing 库。我管理的最好的方法如下,但这也会删除空字段(使用逗号分隔符示例):
s = '1,"2",three,\'four, 4\',,"6\tsix"' wordchars = (printables + ' \t\r\n').replace(',', '', 1) delimitedList(OneOrMore(quotedString | Word(wordchars)), ',').parseWithTabs().parseString(s)
感谢您的任何想法!
【问题讨论】:
-
要使拆分工作,您需要使用保证不会出现在字符串中其他任何位置的字符或字符组合。也许您可以使用不在键盘上的转义字符?
-
恐怕我无法控制输入文件,所以无法决定分隔符。不过感谢您的想法!
-
在这种情况下,正则表达式可能是要走的路。虽然不确定确切的语法。
-
用逗号分割然后修剪
-
每个文本文件中是否总是有相同数量的字段(例如 6 个)?
标签: python regex csv split pyparsing