Я пишу скрипт 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).
Я думаю, это потому, что Сниффер не возвращает правильное значение для «двойной кавычки».