Я пытаюсь исправить некоторые записи в наборе данных (~ 30 МБ). В частности, CSV-файл с текстовым столбцом и столбцом pos / neg. В некоторых текстовых полях отсутствуют заключающие в кавычки обертки, поэтому я хотел бы вставить их вручную.
Вот код, который я написал для этого:
add_quotes = re.compile(r'^(([^"]|"")(.*)([^"]|"")),(pos|neg)$')
with open(<path-to-csv>, 'r') as f:
s = f.read()
s = re.sub(add_quotes, r'"\1",\5', s)
with open(<path-to-same-csv>, 'w') as f:
f.write(s)
Проблема, с которой я столкнулся заключается в том, что после выполнения этого кода регулярное выражение, которое я использовал для нахождения кавычек, по-прежнему совпадает с некоторыми записями в файле.
До сих пор я пытался:
1. Открытие файла как 'r+'
и вызов f.seek(0)
перед записью вместо 'r'
, а затем 'w'
.
2. Запись в другой файл.
3. Открытие и редактирование файла в байтовом формате вместо текста (т.е. 'r+b'
/ 'wb'
).
Все они работают гладко, но достигают того же результата.
Примечания:
- вызов
add_quotes.findall(s)
после подстановки возвращает пустой список, поэтому строка изменилось, но каким-то образом изменения не записываются в файл - тот же код в файл меньшего размера с одним примером работает
Спасибо!
Редактировать
Я пытался использовать это для файла с 3 записями, и это не работает, поэтому я подозреваю, что проблема в регулярном выражении и не имеет никакого отношения к размеру файла.