0

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

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

"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

4 回答 4

3

这里在黑暗中拍摄,但我认为 Excel 将所有内容都放在第一列,因为它不知道它被给予逗号分隔的数据。

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

这里有更多信息:

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

编辑

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

于 2013-02-13T03:04:39.830 回答
0

如果只是 bashing 是一种选择,您可以在终端中尝试这个单行:

cat file.csv | sed 's/"\([^,]*\)"/\1/g' >> new-file.csv
于 2013-02-13T03:04:46.470 回答
0

这在技术上应该没问题。它是用 " 分隔的文本,并通过使逻辑复杂化并引用所有内容。

于 2013-02-13T03:04:58.777 回答
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()

Pythoncsv.writer将默认使用“excel”方言,因此在不需要时不会写逗号。

于 2013-02-13T03:10:54.250 回答