CSV-ридер неверно возвращает первый элемент строки - PullRequest
0 голосов
/ 05 февраля 2020

Я использую python для чтения файла CSV со следующими настройками:

import unicodecsv, ssl    
ctx = ssl._create_unverified_context()
    response = urllib2.urlopen(url, timeout=300, context=ctx)
    data = unicodecsv.reader(response,
                              delimiter=";",
        quotechar="\"",
        doublequote=False,
        quoting=unicodecsv.QUOTE_ALL,
        skipinitialspace=True,
        encoding="utf-8-sig")

Для этой строки:

"ID"; "Product"; "URL"; "Цвет"; "Фондовый"

возвращает: "ID", Product, URL, Color, Stock

Таким образом, для первого элемента в строке это держит цитату Я использую utf-8-sig, потому что есть символы спецификации.

1 Ответ

1 голос
/ 05 февраля 2020

Подтверждено как ошибка в unicodecsv для Python2 (см. выпуск 81 ).

unicodecsv.UnicodeReader не передает кодировку в базовый csv.reader, поэтому он не знает, что спецификация должна быть удалена, поэтому первое поле не начинается с кавычки и не считать как поле в кавычках.

В данный момент проблема имеет возраст 2,5 года, последний раз проект затрагивался 4+ лет go и, похоже, заброшен (за выпуск 92 ). Я настоятельно рекомендую отойти от unicodecsv. Если вам нужно его использовать, прочитайте ответ самостоятельно в строку, разделите спецификацию, затем передайте очищенный текст в unicodecsv через io.StringIO.

...