Как прочитать "битый" CSV?
При чтении CSV файла столкнулся с проблемой, что данные могут приходить битыми. Например:
"Job ID,""Server"",""Agent"",""Subclient"",""Backup type"",""Start time"",""End time"",""Duration(mins)"",""Application size"",""Job status"",""Failure reason"""
Для преобразования строк из файла в CSV использую:
csv_data = StringIO(data)
Данная строка парсится как единое значение, а не как заголовки. Как преодолеть проблему?
Ответы (1 шт):
Автор решения: Vitalizzare ушел в монастырь
→ Ссылка
В общем случае ошибки исправляются вручную, либо же запрашивается повторная выгрузка. Но в вашем случае это похоже на продублированную запись CSV файла. То есть, вам нужно дважды прочитать строки как данные в формате CSV. Например:
from io import StringIO
import csv
raw_data = '''\
"Job ID,""Server"",""Start time"",""Failure reason"""
"100500,""Some server"",""01:02:03,123"",""Something happened, but I don't know what"""
"142542,""Some other server"",""11:22:23,123"",""Nothing happened, it just didn't work"""
'''
with StringIO(raw_data) as file:
data = [*map(lambda x: next(csv.reader(StringIO(x[0]))), csv.reader(file))]
print(data)
# [['Job ID', 'Server', 'Start time', 'Failure reason'],
# ['100500', 'Some server', '01:02:03,123', "Something happened, but I don't know what"],
# ['142542', 'Some other server', '11:22:23,123', "Nothing happened, it just didn't work"]]
Если у вас есть пайплайн выгрузки данных, то будет не лишним проверить, не дублируется ли там запись данных в формате CSV.