Я пытаюсь обновить таблицу в моей базе данных новыми строками из файла .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, чтобы это работало?