我正在尝试清理一些损坏的 csv 文件。一个问题是它们在数据字段中包含换行符,因此将一个数据集一分为二。我正在寻找一段 python 代码,如果它们后面没有 8 位数字,则可以消除换行符。到目前为止我的代码:
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)
基本上,我使用 §§§ 作为正确换行符的占位符,消除数据中的所有换行符,然后再次用换行符替换占位符。
它确实有效,但有没有办法更优雅地做到这一点?
最佳答案
使用 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
关于Python re.sub - 在上下文不匹配时替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17380390/