Python CSV Sniffer обнаруживает текстовые классификаторы в двойных кавычках - PullRequest
0 голосов
/ 24 сентября 2018

Я пишу скрипт Python для синтаксического анализа файлов CSV в каталоге и вывода операторов SQL CREATE TABLE для каждого найденного файла.

directory = os.fsencode(".")
for file in os.listdir(directory):
    filename = os.fsdecode(file)

    if filename.endswith(".csv"): 
        f = open(filename, 'r', encoding="iso-8859-1")
        dialect = csv.Sniffer().sniff(f.read(4096))
        f.seek(0)
        reader = csv.reader(f, dialect)

Простой пример моих данных выглядит следующим образом:

ID|Text1|Text2|Year

"123"|"more data"|"A pipe symbol | typed by an end user"|"2014"

Двойные кавычки включены для предотвращения интерпретации введенного пользователем канала как разделителя.

Вот что анализатор возвращает в качестве диалекта моих фактических данных:

['delimiter', 'doublequote', 'escapechar', 'lineterminator', 'quotechar', 'quoting', 'skipinitialspace']

['|', False, None, '\r\n', '"', 0, False]

Я пытаюсь обработать значения в данных, используя код, адаптированный из этого: https://www.periscopedata.com/blog/python-create-table

Все столбцы возвращают varchar, а все столбцы, кроме первого и последнего, возвращают varchar (0).

Я думаю, это потому, что Сниффер не возвращает правильное значение для «двойной кавычки».

...