Python:C引擎不支持正则表达式分隔符

时间:2015-12-18 16:55:00

标签: python regex pandas

尝试将一堆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) 

2 个答案:

答案 0 :(得分:1)

如果您可以预处理并更改文件,请尝试将;分隔符更改为,以生成干净的csv文件。您可以使用fileinput将其更改到位:

import fileinput

for line in fileinput.FileInput('your_file', inplace=True):
    line = line.replace(';', ',')
    print(line, end='')
fileinput.close()

然后,您可以将read_csvc引擎一起使用并使用参数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)