尝试将一堆csv上传到数据库。 csvs不一定总是用逗号分隔,所以我使用正则表达式来确保使用正确的分隔符。然后我添加了
error_bad_lines=False
为了处理CParserError:错误标记数据。 C错误:第127行预计3个字段,见4 这导致我收到此错误
ValueError: Falling back to the 'python' engine because the 'c' engine does not support regex separators, but this causes 'error_bad_lines' to be ignored as it is not supported by the 'python' engine.
以下代码
有解决方法吗?
import psycopg2
import pandas as pd
import sqlalchemy as sa
csvList = []
tableList = []
filenames = find_csv_filenames(directory)
for name in filenames:
lhs, rhs = str(name).split(".", 1)
print name
dataRaw = pd.read_csv(name,sep=";|,",chunksize=5000000, error_bad_lines=False)
for chunk in dataRaw:
chunk.to_sql(name = str(lhs),if_exists='append',con=con)
答案 0 :(得分:1)
如果您可以预处理并更改文件,请尝试将;
分隔符更改为,
以生成干净的csv文件。您可以使用fileinput
将其更改到位:
import fileinput
for line in fileinput.FileInput('your_file', inplace=True):
line = line.replace(';', ',')
print(line, end='')
fileinput.close()
然后,您可以将read_csv
与c
引擎一起使用并使用参数error_bad_lines
,或者您也可以使用该循环预处理它们。
注意:如果您要对文件进行备份,可以使用backup
的{{1}}参数
答案 1 :(得分:1)
根据此链接Pandas-link 中的pandas参数 如果分隔符超过一个字符,则需要将引擎参数添加为'python'。
尝试一下
dataRaw = pd.read_csv(name,sep=";|,",engine ='python',chunksize=5000000,
error_bad_lines=False)