python 导入csv-怎么用Python批量将CSV导入到Mysql?

#!/usr/bin/env Python

# coding=utf-8

debug=0

"""""接口开发:从本地读取数据(xls,csv,txt,xlsx),部分格式有问题的对付掉,计算结果,再写入远程数据库1、读取指定目录下的所有文件2、根据读取文件类型(都是表格文件),读取成SQL可以识别的格式。部分格式有问题的需要对付掉3、导入SQL"""

# 读取文件必备

import os,sys

# AttributeError: "NoneType" object has no attribute "fileno"补丁

sys.__stdout__ = sys.stdout

# 输出靠谱日志必备

import logging

logging.basicConfig(level=logging.DEBUG) if debug else logging.basicConfig(level=logging.WARNING)

# 为了让Python能够高效率处理表格数据,我们使用一个非常优秀的数据处理框架Pandas。

# 另外,利用pandas.DataFrame.to_sql写入数据库。

import pandas as pd

import numpy as np

# 导入SQL用包

import sqlalchemy,pymssql

from sqlalchemy import create_engine

# 现代化的数据库链接方式

def conn(sqlType="mssql",pysql="pymssql",host ="127.0.0.1",database ="test",user="sa",password="123"):

# pymssql.create_engine是数据库引擎

# ("mysql+mysqldb://root:password@localhost:3306/databasename?charset=utf8")的解释

# mysql是要用的数据库

# mysqldb是需要用的接口程序

# root是数据库账户

# password是数据库密码

# localhost是数据库所在服务器的地址,这里是本机

# 3306是mysql占用的端口

# elonuse是数据库的名字

# charset=utf8是设置数据库的编码方式,这样可以防止latin字符不识别而报错

# echo=True是调试模式

return create_engine(sqlType+"+"+pysql+"://"+user+":"+password+"@"+host+"/"+database+"?charset=utf8", echo=debug)

# 传统的数据链接模式:

# def conn(host =".",database ="test",user="sa",password="123"):

# return pymssql.connect(host=host,database=database,user=user,password=password)

# 遍历指定目录,显示目录下的所有文件名

def eachFile(path):

pathDir = os.listdir(path)

pathFile=[]

for allDir in pathDir:

child = os.path.join(path, allDir)

logging.info("目录下发现文件:" + child)

tmp={}

tmp["fulldir"]=child

tmp["dirname"],tmp["filename"]=os.path.split(child)

tmp["fname"],tmp["fename"]=os.path.splitext(tmp["filename"])

pathFile.append(tmp)

return pathFile

# 用panda读取文件

def readFile(type,fulldir):

# 通过匿名函数实现Switch/Case

logging.info("readFile(type,fulldir)"+str([type,fulldir]))

logging.debug("正在读取文件")

return {

".csv": lambda x: pd.read_csv(x,encoding="gb2312",sep=",| ",engine="python"), # 吐槽一句,不知道为什么csv格式分隔符会有空格和逗号2种格式,坑爹啊。

".txt": lambda x: pd.read_csv(x,encoding="gb2312",sep=",| ",engine="python"),

".xls": lambda x: pd.read_excel(x,encoding="gb2312",index=False),

".xlsx": lambda x: pd.read_excel(x,encoding="utf-8"),

}.get(type)(open(fulldir))

if __name__ == "__main__":

# TODO:测试时写死文件路径,实际运行时需要改,最好能够自动化

fileInPath = "D:\test"

# 连数据库

engine=conn()

# 遍历指定目录,统计目录下所有文件

fileList=eachFile(fileInPath)

# 批量读文件,批量入数组

fileArray=[]

for file in fileList:

# 读取的文件存数组里,以后说不定有用

file["df"]=readFile(file["fename"],file["fulldir"])

logging.debug("正在写数据库")

# 批量入数据库,使用pandas IO Tools,参考http://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.DataFrame.to_sql.html?chunksize=1000的意思是分块导入,最大块大小1000

file["df"].to_sql(file["fname"],engine, if_exists="append", chunksize=500)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值