我完全不知道如何做到这一点。
我的问题:我想接受这个:
"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或其他任何东西来制作整个项目来处理这个问题。
非常感谢任何帮助!
答案 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”方言,因此在不需要时不会写逗号。