pandas使用换行符解析csv

时间:2017-05-15 17:48:01

标签: python csv pandas awk newline

前段时间我在数据的两边都使用了引号,现在将它读入pandas pandas parse csv with left and right quote chars,我还需要支持换行符和一些奇怪的字符。

下面的最小样本,第一个字符串(temp)将正常工作,但第二个字符串不能正确解析。

import pandas as pd
import os
from pandas.compat import StringIO

temp=u"""<first>$$><$$<second>$$><$$<first>
<foo>$$><$$<bar>$$><$$<baz>"""

temp=u"""<first>$$><$$<second>$$><$$<third>
<foo>$$><$$<bar>$$><$$<baz>
<foo>$$><$$<Green; kkkk 101; aaaa, bbb; [foo<1>>aaa<123>>xxx<1>>zzz<1.17989207 | 18187681 | asdf |>>
;sdf{ 

}
;ADD{

]>$$><$$<baz>"""

big_df = pd.read_csv(StringIO(temp), 
                 encoding='utf8', 
                 sep='\$\$><\$\$', 
                 decimal=',', 
                 engine='python') # we cant use pandas optimized C parser due to our special delimiters.

big_df.iloc[:, -1] = big_df.iloc[:, -1].str.replace('\$\$>$', '')
big_df.iloc[:, -1] = big_df.iloc[:, -1].str.replace('\$\$>$', '')
big_df = big_df.replace(['^<', '>$'], ['', ''], regex=True)

big_df.columns = big_df.columns.to_series().replace(['^<', '>$', '>\$\$'], ['', '', ''], regex=True)
big_df

修改

如评论中所述 - 当将所有内容放在一行上时,它可以正常工作。 我怎样才能通过sed / Awk实现自动化? awk '{printf("%s ",$0)} END{print ""}' sample.csv将删除所有新行,并将所有内容连接成一行。我宁愿只想删除有问题的换行符。

awk -F, 'NF < 4 {getline nextline; $0 = $0 nextline} 1' sample.csv已经删除了正常的换行符。但仍然有额外的空白行。

1 个答案:

答案 0 :(得分:1)

所以你的真实&#34;换行符标有$$>\n。将您的文件读入字符串,将$$>\n替换为临时内容,删除所有剩余的换行符,重新插入&#34;真实&#34;新行,然后传递给read_csv()。

temp = temp.replace('$$>\n', '%%NEWLINE%%').replace('\n','').replace('%%NEWLINE%%', '\n')
big_df = pd.read_csv(StringIO(temp), ...)