如果不包含逗号,则将前导引号和尾部引号正则expression
我完全丧失了如何做到这一点。
我的问题:我想要这样做:
"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)
我使用的软件在文本文件中创build了1,900条logging,我认为它应该是一个CSV文件,但是编写软件的人不知道CSV文件是如何工作的,因为如果单元格中包含逗号,它就只需要引号(对吧?)。 至less我知道在Excel中它把所有东西放在第一个单元格中。
我更喜欢使用某种命令行工具,如perl或python(我在Mac上)解决这个问题。 我不想在Java中做一个完整的项目或者任何需要处理的东西。
任何帮助是极大的赞赏!
在这里黑暗中拍摄,但我认为Excel将所有内容放在第一列,因为它不知道它是由逗号分隔的数据。
Excel有一个“文本到列”的function,你可以通过分隔符来分隔列(确保你select了逗号)。
这里有更多的信息:
http://support.microsoft.com/kb/214261
编辑
您也可以尝试将文件从* .txt重命名为* .csv。 这将改变Excel读取文件的方式,所以它更好地理解如何parsing里面发现的任何东西。
如果只是抨击是一个select,你可以尝试在terminal这一行:
cat file.csv | sed 's/"\([^,]*\)"/\1/g' >> new-file.csv
技术上应该没问题。 它是用“和文本分隔”的,我根本看不出有什么问题,任何一个字段都可以引用,只有一些字段需要引用。代码的编写者不太可能想要结束复杂的逻辑和引用的一切。
清理它的一种方法是将数据提供给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”方言,所以在不需要时不会写入逗号。