Python 通过忽略“将csv读入数据帧”;LF";及;CR LF“;现场附件内的引号(“";”)

Python 通过忽略“将csv读入数据帧”;LF";及;CR LF“;现场附件内的引号(“";”),python,regex,csv,delimiter-separated-values,Python,Regex,Csv,Delimiter Separated Values,我有一个数据文件,其中字段用双引号和字段分隔符括起来,如下所示: field enclosure = "<field_value>" sep = ||@@## 您可以使用 rx\u lbr=r'[\r\n\x0B\x0C\u0085\u2028\u2029]+' 将open(filepath'r',newline=“\n”,encoding=“utf-8”)作为fr: 将open(savefilepath,'w',newline=“\n”,encoding=“u

我有一个数据文件,其中字段用双引号和字段分隔符括起来,如下所示:

field enclosure = "<field_value>"
sep = ||@@##
您可以使用

rx\u lbr=r'[\r\n\x0B\x0C\u0085\u2028\u2029]+'
将open(filepath'r',newline=“\n”,encoding=“utf-8”)作为fr:
将open(savefilepath,'w',newline=“\n”,encoding=“utf-8”)作为fw:
fw.write(re.sub(r'[^“]*”),lambda x:re.sub(rx_lbr',,x.group()),fr.read())
“[^”]*”
regex with
re.sub
匹配单引号之间所有不重叠的子字符串,
lambda x:re.sub(rx_lbr,,,x.group())
替换仅从匹配中删除所有垂直空格Unicode字符。因此,所有其他换行符保持不变

见:

重新导入
“2016-01-01-13 13 19:19:19:19:19:19:19:19:27”今年10-01-13 13 19:19:19:27 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7????????????????????????????????????\\现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场施工施工施工施工现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场""vhijdfyshv"| |"---
...
“2016-01-15-15 23:09:10 10 10-12 12月12日第四四四四四四四????\\\124周四周四周四周四周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五\甲甲甲甲甲四四四四四四四四四四四\\\甲甲甲四四四四四四\\\\甲甲甲四四四四四四四\\\\\甲甲甲甲甲四四四四四四四四四四四四四四四四四四四四四四四\\\\\\\\\在本本本凯凯除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外之外贝格夫布奇维德街251号
JHbsdbfh,RF 35214
xyz@gmail.dhg.com
@@##1788
本周四周四周四周四周四周四周四周四周四周四周四周四周四周四周四周四周四周四周四周四周四周四周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五"vhijdfyshv"| | |@##"---
"""
打印(re.sub(r'[^“]*”,lambda x:re.sub(r'[\r\n\x0B\x0C\u0085\u2028\u2029]+,'',x.group()),内容))

你想用正则表达式实现什么?删除换行符?是的,那些换行符,无论是CRLF还是打破我记录的LF,都应该只显示在一行中,而不是*单独的行中。看起来你只有CRLF在记录中,如果删除它们,记录将在一行中。然后,用open(filepath,'rb')尝试
作为文件:打开(savefilepath,'w',encoding='utf-8')作为fw:fw.write(file.read().replace(b'\r\n',b')。解码('utf-8'))
。然后您可以使用pandas将
savefilepath
文件读入数据框。您不必保存这些文件。但是,由于您的匹配跨越多行,因此您必须将整个文件读入内存。基本上,您需要将
与open(filepath,'r')一起使用,作为文件:content=re.sub(r'[^']*',lambda x:x.group().replace(“\n”,”),file.read())
。如果文件凌乱,您可能需要使用open(filepath,'r',newline=“\n”)作为文件
:content=re.sub(r'[^”]*”,lambda x:re.sub(r'[\u000A-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000],'',x.group()),file.read())
好的。谢谢,谢谢!
3||@@##14||@@##"2016-01-13 19:59:27"||@@##"2016-01-15 23:09:19"||@@##1162||@@##822||@@##1237||@@##\N||@@##"VHiujdfYshv"||@@##"---<LF>
...LF
"||@@##\N||@@##"2016-01-15 23:09:18"||@@##0||@@##1||@@##0||@@##0||@@##3||@@##1788||@@##\N||@@##205||@@##\N||@@##0||@@##\N||@@##\N||@@##\N||@@##\N||@@##\N||@@##\N||@@##1||@@##\N||@@##"251 Bgegf BHVcvytd Street<CR LF>
JHbsdbfh, RF 35214<CR LF>
<CR LF>
xyz@gmail.dhg.com<CR LF>
<CR LF>
@@##1788<LF>
4||@@##14||@@##"2016-01-25 22:08:53"||@@##"2016-02-15 20:32:08"||@@##1097||@@##933||@@##1262||@@##\N||@@##"VHiujdfYshv"||@@##"--- <LF>
...<LF>
df =  pd.read_csv(z.open(filename), 
                              encoding = 'utf8',
                              header=None,
                              sep='\|\|@@##',
                              na_values='\\N',
                             engine = 'python')