2013-06-29 81 views
2

我想清理一些损坏的csv文件。一个问题是它们在数据字段中包含换行符,从而将一个数据集分成两部分。我正在寻找一个python代码,消除换行符,如果他们不跟随8位数字。到目前为止我的代码:Python re.sub - 在上下文不匹配时替换字符

filetoparse = open('test.csv', encoding='utf-8') 
data = filetoparse.read() 

data = re.sub(r'\n(\d{8})',r'§§§\1',data) 
data = re.sub(r'\n',r'',data) 
data = re.sub(r'§§§','\n',data) 

基本上我现在用的是§§§作为正确路线的占位符源,消除数据中的所有换行符,然后替换占位符与线再次饲料。

它确实有用,但有没有办法更优雅地做到这一点?

回答

1

使用negative lookahead pattern

data = re.sub(r'\n(?!\d{8})', '', data) 

例如,

import re 
data = ''' 
12345678 foo 
bar 
baz 
12345678 foo 
''' 
data = re.sub(r'\n(?!\d{8})', '', data) 

print(data) 

产量

12345678 foobarbaz 
12345678 foo 
+0

啊,谢谢你 - 这就是我一直在寻找! –