Плохой формат CSV читать в Python

У меня есть CSV-файл, полученный в неправильном формате (не имеют контроля над приложением, которое генерирует этот CSV)

Заголовки CSV и первой строки выглядят следующим образом:

"Start Time"
"End Time"
"Service"

"255/06:06:54","255/06:54:42","S2 AVAIL"

Это код, который я использую для чтения CSV:

import csv
import os
import sys
rootPath = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..'))
inputFile = open(rootPath + '\\input\\' + sys.argv[1], 'rt')
sys.path.append(rootPath + '\\common')
    for row in csv.reader(inputFile, dialect='excel'):
        if row:
            print(row)

Это вывод, который я получаю:

['"Start Time"']
['End Time']
['Service']
['255/06:06:54', '255/06:54:42', 'S2 AVAIL']

Первая проблема заключается в том, что странный символ (может быть, отсутствует опция кодирования?), А также заголовок неверен и не может использовать DictReader для этого формата, что для редактирования, которое я должен сделать с CSV, полезно.

Я мог бы переписать новый CSV с правильно отформатированным заголовком, это не проблема, но я не знаю, как пропустить первые 3 строки CSV!? Или я могу прочитать его в формате CSV?

Это вывод, который я хочу получить с помощью csv.reader:

['Start Time', 'End Time', 'Service']
['255/06:06:54', '255/06:54:42', 'S2 AVAIL']

или с помощью csv.DictReader:

OrderedDict([('Start Time', '255/06:06:54'), ('End Time', '255/06:54:42'), ('Service', 'S2 AVAIL')])

1 ответ

Решение

В конце я выбираю переписать CSV в правильном формате, затем работаю с ним, в реализованном решении также метка спецификации игнорируется в новом CSV, в любом случае предлагаемая мне ссылка на спецификацию содержит исправление для этой проблемы!

вот код реализации моего решения:

import csv
import os
import sys
rootPath = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..'))
sys.path.append(rootPath + '\\common')
from function import *

inputFile = open(rootPath + '\\input\\' + sys.argv[1], 'r')
outputFile = open(rootPath + '\\input\\formatted.csv', 'w', newline='')
writeFile = csv.writer(outputFile)
writeFile.writerow(['StartTime','EndTime','Service'])
for row in csv.reader(inputFile.readlines()[3:], dialect='excel'):
    if row:
        writeFile.writerow(row)
inputFile.close()
outputFile.close()
Другие вопросы по тегам