2013-06-29 2 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

ах, спасибо - это было то, что я искал! –

Смежные вопросы