0

我正在尝试使用 .csv 文件中的任何新行更新我的数据库中的表,该文件仅包含 2 列,并以逗号作为分隔符。

但是,这些列中的每一列都包含许多额外的逗号(以及双引号、单引号、空格等)。这两列都是数据类型 TEXT。

以下是每列中文本类型的示例:

第 1 列(命名:文件名) 注意:全文中出现以下内容:,(逗号)、"、'、""(连续双引号)、''(连续单引号)

DOH_cumulative_text_files游泳池Spas_52-60-1632726_6West Beach Cottages_13354 Gulf Boulevard_Madeira Beach_20181219_Inspection.69.pdf.txt

第 2 列(名称:内容)佛罗里达州卫生局县卫生局公共泳池和洗浴场所检查报告**** DowningBK 12/20/2018 4:01:21 PM ****1 of 2 设施信息许可证号: 52-60-1632726 设施名称:6West Beach Cottages 地址:13354 Gulf Boulevard City,邮编:Madeira Beach33708

值得注意的是,第 2 列中的文本字符串总是大约 4-6k 个字符长,包括空格。

我尝试更改创建这些 .csv 文件的脚本以使用文本字符串中从未出现过的分隔符(即“~”),但这样做会导致相同的错误“pandas.errors.ParserError: Error tokenizing数据。C 错误:第 3 行中应有 1 个字段,看到 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 错误:第 3 行中应有 1 个字段,看到 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)

我已经尝试过 pandas 中的“c”和“python”引擎。但是当我使用 python 引擎时,我得到一个空字节错误。

我尝试了不同的 na_values 和不同的引用值但没有成功。我应该如何处理 read_csv 行或 to_sql 行来完成这项工作?

4

1 回答 1

0

我只是通过将数据库导入代码更改为以下内容来实现这一点:

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)
于 2019-01-29T04:28:07.170 回答