我是使用pandas和sqlalchemy来实现将大csv文件导入到MySQL数据库的
处理的文件足足有14个g(第一次处理这么大的csv文件)
由于数据文件太大,在读取csv文件的时候,遇到困难:首先使用wps打不开然后在python中使用基本的pandas.read_csv打开文件时报错:MemoryError
所以就需要分块对文件进行读取并分块存储进数据库
# -*- coding: utf-8 -*-
# @Author : hqf
# @File : 数据库存储.py
import pandas as pd
import time
from sqlalchemy import create_engine
def save_to_db():
print("---{} 存储开始---".format(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))))
# 读取数据
data = pd.read_csv('.\临沂创意赛-数据\临沂创意赛-数据.csv', encoding='utf-8', chunksize=100000, iterator=True)# 分块读取10万条数据
# 创建连接数据库对象
engine = create_engine('mysql+pymysql://用户名:密码@localhost/数据库名称?charset=utf8')
count = 1
for chunk in data:
print("存储第{}块数据".format(count))
# 存入数据库
chunk.to_sql('t_linyi', engine, if_exists='append')# if_exists='append' 如果表存在就向表追加数据
count += 1
print("---{} 存储完成---".format(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))))
def main():
save_to_db()
if __name__ == '__main__':
main()
一共一亿两千万条数据