Ошибки разбора Pandas из-за лишних запятых в столбцах при попытке добавить строки в таблицу SQL с помощью read_csv w / to_sql - PullRequest
0 голосов
/ 29 января 2019

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

Однако каждый из этих столбцов содержит много дополнительныхзапятые (и двойные кавычки, одинарные кавычки, пробелы и т. д.) Оба столбца имеют тип данных TEXT.

Ниже приведен пример типа текста в каждом столбце:

столбец 1 (named: filename) Примечание. В тексте встречается следующее:, (запятые), ", '," "(последовательные двойные кавычки),' '(последовательные одинарные кавычки)

DOH_cumulative_text_filesSwimmingPoolsSpas_52-60-1632726_6West Beach Cottages_13354 Бульвар Залива_Madeira Beach_20181219_Inspection.69.pdf.txt

колонка 2 (названная: содержание) СОСТОЯНИЕ ФЛОРИДСКОГО ОТДЕЛЕНИЯ ЗДРАВООХРАНЕНИЯ ЗДРАВООХРАНЕНИЯ И ПИТАНИЯ В ПУБЛЕНТЕ ПАЛАТ/ 20/2018 4: 01: 21 PM **** 1 из 2 Номер разрешения на предоставление информации об объекте: 52-60-1632726 Название объекта: 6West Beach Cottages Адрес: 13354Gulf Boulevard City, почтовый индекс: Madeira Beach33708

Стоит отметить, что длина текстовых строк в столбце 2 всегда составляет около 4-6 тыс. Символов, включая пробелы.

Я пытался изменить скриптэто создает эти CSV-файлы для использования разделителя, который никогда не встречается в текстовой строке (т. е. «~»), но при этом выдает ту же ошибку «pandas.errors.ParserError: Ошибка токенизации данных.Ошибка C: Ожидается 1 поле в строке 3, пила 2 ".

Вот код, который создает .csv из нескольких файлов .txt:

with open('doh_reports'+timestamp()+'.csv', 'w') as out_file:
    csv_out = csv.writer(out_file)
    csv_out.writerow(['filename', 'content'])
    for filename in Path('.').glob('*.txt'):
        csv_out.writerow([str(filename),open(str(filename.absolute())).read().replace('\n','').strip()])

Вот кодЯ использую для загрузки в базу данных: (Я написал так, что таблица в моей базе данных непрерывно импортирует любые новые строки из любых .csv файлов в каталоге.)

path =r'/Users/.../DOH_cumulative'

allFiles = os.listdir(path)

df = pd.concat((pd.read_csv(f,engine='c',na_values='',keep_default_na='False') for f in allFiles),ignore_index=True)

df.to_sql(name='doh_test',con=dbconn,if_exists='append',index=False)

Я пытался изменитькод read_csv к следующему и по-прежнему появляется та же ошибка "pandas.errors.ParserError: Ошибка токенизации данных.Ошибка C: Ожидается 1 поле в строке 3, пила 4 ":

df = pd.concat((pd.read_csv(f,engine='c',doublequote=True,delimiter=',',quoting=3,index_col=False) for f in allFiles),ignore_index=True)
df=df.replace({'"': '','\'':''}, regex=True)

Я попробовал оба движка 'c' и 'python' в пандах. Но когда я использую движок python, я получаюошибка нулевого байта.

Я безуспешно пробовал разные значения na_value и разные значения в кавычках. Что мне делать со строкой read_csv или строкой to_sql, чтобы это работало?

1 Ответ

0 голосов
/ 29 января 2019

Я только что заработал, изменив код импорта базы данных на следующий:

for files in source:
    if files.endswith(".csv"):
        df = pd.read_csv(os.path.join(sourcepath,files))
        df.to_sql(name='doh_test',con=dbconn,if_exists='append',index=False)
...