正则表达式输出前导和尾随引号如果不包含逗号

时间:2013-02-13 02:52:41

标签: python regex perl excel csv

我完全不知道如何做到这一点。

我的问题:我想接受这个:

"A, two words with comma","B","C word without comma","D"
"E, two words with comma","F","G more stuff","H no commas here!"
... (continue)

对此:

"A, two words with comma",B,C word without comma,D
"E, two words with comma",F,G more stuff,H no commas here!
... (continue)

我使用的软件在一个文本文件中创建了1,900条记录,我认为它应该是CSV,但是编写该软件的人不知道CSV文件是如何工作的,因为如果单元格包含逗号,它只需要引号(右?)。至少我知道在Excel中它将所有内容放在第一个单元格中......

我希望使用某种命令行工具(如perl或python)来解决这个问题(我在Mac上)。我不想用Java或其他任何东西来制作整个项目来处理这个问题。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

在黑暗中拍摄,但我认为Excel会将所有内容放在第一列,因为它不知道它是以逗号分隔的数据。

Excel具有“文本到列”功能,您可以通过分隔符拆分列(确保选择逗号)。

这里有更多信息:

http://support.microsoft.com/kb/214261

修改

您也可以尝试将文件从* .txt重命名为* .csv。这将改变Excel读取文件的方式,因此它更好地理解如何解析它在内部找到的任何内容。

答案 1 :(得分:0)

如果只是抨击是一种选择,你可以在终端中试用这个单行:

cat file.csv | sed 's/"\([^,]*\)"/\1/g' >> new-file.csv

答案 2 :(得分:0)

技术上应该没问题。它是用“和经过分隔的”分隔的文本。 我根本没有看到任何错误,任何字段都可以引用,只有一些需要它。代码的作者很可能不想过度复杂化逻辑并引用一切。

答案 3 :(得分:0)

清理它的一种方法是将数据提供给csv并将其转储回来。

import csv
from cStringIO import StringIO

bad_data = """\
"A, two words with comma","B","C word without comma","D"
"E, two words with comma","F","G more stuff","H no commas here!"
"""

buffer = StringIO()
writer = csv.writer(buffer)
writer.writerows(csv.reader(bad_data.split('\n')))

buffer.seek(0)
print buffer.read()

Python的csv.writer将默认为“excel”方言,因此在不需要时不会写逗号。