【发布时间】:2015-12-18 16:54:59
【问题描述】:
尝试将一堆 csv 上传到数据库。 csv 不一定总是用逗号分隔,所以我使用正则表达式来确保使用正确的分隔符。然后我添加了
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)
【问题讨论】:
-
您的数据是什么样的?如果您的字段并不总是用逗号分隔,那么它就不是真正的 CSV。你也许可以一起破解一些东西,但如果即使使用正则表达式分隔符也不能让你始终如一地提取字段,听起来你可能超出了 CSV 解析器的处理范围。
-
据我所知,这些字段用逗号和分号分隔。我可以手动进入每个文件并一次上传一个,但我已经失去了编程的目的
-
您能更改这些文件吗?如果是,您可以预处理您的文件并将
;更改为,,例如使用pythonre.sub或linuxsed。 -
我想我可以这样做,一些文件在加载到内存时出现问题,它们有 30 列 5500 万行之类的东西,而且它似乎很快就炸毁了我的 32GB RAM。生病调查 re.sub
-
您可以逐行执行并创建另一个干净的文件(如果您有足够的存储空间来存储它)。使用that 问题的答案。