Python 使用换行符解析csv

Python 使用换行符解析csv,python,csv,pandas,awk,newline,Python,Csv,Pandas,Awk,Newline,前一段时间,我在数据的两面都引用了引号,并将其读入了pandas。现在,我还需要支持换行符和一些奇怪的字符 在下面的最小示例中,第一个字符串temp可以正常工作,但第二个字符串不能正确解析 import pandas as pd import os from pandas.compat import StringIO temp=u"""<first>$$><$$<second>$$><$$<first> <foo>$$&g

前一段时间,我在数据的两面都引用了引号,并将其读入了pandas。现在,我还需要支持换行符和一些奇怪的字符

在下面的最小示例中,第一个字符串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将已经删除正常的换行符。但是仍然有额外的空行。

因此,您真正的换行符标记为$$>\n。将文件读入字符串,用临时内容替换$$>\n,删除所有剩余的换行符,重新插入真正的换行符,然后传递到Read\u csv

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

当我手动删除换行符时,解析工作正常。对不起,我需要更新示例。它们仅标记为>\n,df |>>\n也会在此处引起问题。但是您的想法很好,即将模式扩展到>\n您可以使用多处理进程池来分块输入文件,但是如果您想在单个进程中对big_df进行处理,请注意在进程之间序列化数据帧并不快。