【发布时间】:2018-05-23 05:33:56
【问题描述】:
实际的 CSV 文件可能有数万或数十万行,相当于 Name/Phone 组合,这会浪费大量内存和磁盘空间。我知道如何使用 SQL 将这些数据实际存储在数据库中后对其进行规范化,但我希望避免首先复制所有这些重复项,而是插入外键关系。这些列中的重复值占用的磁盘空间相当可观。
目前我正在使用 Python 和 Pandas 来自动化创建 SQLite 数据库并将数据插入其中的过程。我也为此尝试过 PostgreSQL,但由于某种原因发现它比 pandas+sqlite 慢。
如何在插入数据库之前将这些数据拆分为多个表?
编辑由于文件的大小,我将它们分块处理,如下所示:
import glob
import pandas as pd
import sqlite3
def read_nlines(file: str, n: int = 10) -> pd.DataFrame:
return pd.read_csv(file, nrows=n, comment='#', skip_blank_lines=True,
sep='\t', encoding='utf-8')
conn = sqlite3.connect("data.db")
cur = conn.cursor()
files = glob.glob("data/*.txt")
for file in files:
data = read_nlines(file)
###--->
###---> This is where I want to transform the data, before writing to sql <---###
###--->
data.to_sql('table',con=conn,if_exists='replace')
conn.close()
【问题讨论】:
-
那么真正的问题是什么?
标签: python postgresql sqlite pandas csv