-
编译环境:Python3.7
-
编译器:pycharm
-
数据库可视化软件:Navicat premium 15
-
数据库:MySQL 8.0.20
数据库搭建
数据库可视化软件
批量合并数据文件
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 14 15:25:44 2020
@author: HP
"""
#合并一个文件夹下的多个txt文件
#coding=utf-8
import os
import pandas as pd
#获取目标文件夹的路径
filedir = r'C:\xxx\xxx'
#获取当前文件夹中的文件名称列表
filenames=os.listdir(filedir)
i=0
data = pd.read_csv(r'C:\xxx\xxx\xxx.txt',sep = '\t')
col = list(data)
data = pd.DataFrame(columns=col)
#先遍历文件名
for filename in filenames:
i+=1
print(i)
if i>0:
filepath = filedir+'\\'+filename
print(filepath)
#遍历单个文件,读取行数
# datai = pd.read_csv(filepath, sep='\t', dtype=str)
datai = pd.read_csv(filepath, sep='\t', converters={'item': str})
data = data.append(datai)
'''
for line in open(filepath, 'r', encoding='utf-8-sig', errors='ignore'):
# print(str(line))
f.writelines(line)
# f.write('\n')
'''
#关闭文件
# f.close()
data.to_excel('XXX.xlsx', index=False)
data = pd.read_csv(r'D:\xxx\xxx.txt',sep = '\t')
col = list(data)
data = pd.DataFrame(columns=col)
'''
for line in open(filepath, 'r', encoding='utf-8-sig', errors='ignore'):
# print(str(line))
f.writelines(line)
# f.write('\n')
'''
'result.txt','w') f=open(
将数据写入数据库
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 14 17:34:23 2020
@author: HP
"""
"""
功能:将Excel数据导入到MySQL数据库
"""
import xlrd
import MySQLdb
import pandas as pd
d = pd.read_csv('xxx.txt',sep = '\t')
col = list(d)
cols = ','.join(col)
# Open the workbook and define the worksheet
book = xlrd.open_workbook("XXX.xlsx") # excel文件名
# book = xlrd.open_workbook("1.xlsx")
sheet = book.sheet_by_index(0) # excel文件中的sheet名
# 建立一个MySQL连接
database = MySQLdb.connect(host="xxxxxxx", user="xxxx", passwd="xxxxxx", db="xxxxx", charset="utf8")
# 获得游标对象, 用于逐行遍历数据库数据
cursor = database.cursor()
# 创建插入SQL语句
# query = """INSERT INTO acd_file (%s) VALUES (%s)""" %(cols, ss)
# 创建一个for循环迭代读取xls文件每行数据的, 从第二行开始是要跳过标题
data_list = []
for r in range(1, sheet.nrows):
row_list = []
for t in range(len(col)):
value_rt = sheet.cell(r,t).value
type_rt = sheet.cell(r,t).ctype
if type_rt == 2:
value_rt = str(int(value_rt))
row_list.append(value_rt)
data_list.append(row_list)
# values = ','.join(data_list)
# query = """INSERT INTO acd_file (%s) VALUES (%s)""" %(cols, s)
# 执行sql语句
# cursor.execute(query, values)
val = ''
for i in range(0, len(col)):
val = val + '%s,'
result =cursor.executemany("insert into xxx (%s) values(" %(cols) + val[:-1] + ")", data_list)
print(result)
# 关闭游标
cursor.close()
# 提交
database.commit()
# 关闭数据库连接
database.close()
# 打印结果
print("")
print("Done! ")
print("")
columns = str(sheet.ncols)
rows = str(sheet.nrows)
print("我刚导入了 ", columns, " 列 and ", rows, " 行数据到MySQL!")
基础数据导入
d = pd.read_csv('xxx.txt',sep = '\t')
col = list(d)
cols = ','.join(col)
# Open the workbook and define the worksheet
book = xlrd.open_workbook("XXX.xlsx") # excel文件名
# book = xlrd.open_workbook("1.xlsx")
sheet = book.sheet_by_index(0) # excel文件中的sheet名
链接数据库
database = MySQLdb.connect(host="xxxxxxx", user="xxxx", passwd="xxxxxx", db="xxxxx", charset="utf8")
-
host:主机名,如果是访问本机数据库的话,一般是localhost,如果是访问网络数据库的话,就要写服务器的网络地址了
-
user:用户名,你数据库的用户名,这里就与自己当初搭建的数据库密切相关了
-
passwd:这个数据库用户名对应的密码,就是我前面提到的那个密码,很重要、很重要、很重要
-
db:你要讲数据写入的数据库名称
-
charset:这玩意儿很坑,字符格式,主要看你的数据库是什么样的,我的是utf-8,所以这里我写上了,但很多教程并没有这个,所以经常报错,没写上之前,我也是各种报错
数据处理
data_list = []
for r in range(1, sheet.nrows):
row_list = []
for t in range(len(col)):
value_rt = sheet.cell(r,t).value
type_rt = sheet.cell(r,t).ctype
if type_rt == 2:
value_rt = str(int(value_rt))
row_list.append(value_rt)
data_list.append(row_list)
type_rt = sheet.cell(r,t).ctype用于获取每个字符的类型
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
写入数据库
val = ''
for i in range(0, len(col)):
val = val + '%s,'
result =cursor.executemany("insert into xxx (%s) values(" %(cols) + val[:-1] + ")", data_list)
s =['%s']*len(col)
ss = ','.join(s)
executemany是批量写入函数,“insert into xxx (%s) values(” %(cols) + val[:-1] + ")"中的xxx是数据表。还有另外一种写法,不用批量导入,而是用execute函数,每读一行,就写一行,写在循环里面,但是当时老是报错,我就没继续下去了。
后面就是常规的数据库操作了
当然,整个过程不断的报错,比如报错说我的字符串长度太长了,等等,要在数据库里面修改一些参数,可能每个人遇到的问题不一样,遇到了就去网上搜索教程,基本都能解决。
至此完成了数据的写入,接下来看看怎么在Python里查询数据
Python操作数据库查询数据
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 16 09:33:42 2020
@author: HP
"""
import MySQLdb
import pandas as pd
conn = MySQLdb.connect(
host="xxxx",
user="xxxx",
passwd="xxxxx",
db="xxxxx",
charset="utf8")
cur = conn.cursor()
query = """ select x1, x2, x3, x4
from table1
where x1 >= 1
and x1 < 100 """
cur.execute(query)
result = cur.fetchall()
df_result = pd.DataFrame(list(result), columns=['x1','x2','x3','x4'])
第二步,写查询语句,select from where基本查询语法
第三步,执行查询语句
顺利出结果
相对来说,要简单的多
写在后面
PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。
Python读者交流群已成立
公众号运营至今,离不开小伙伴们的支持。为了给小伙伴们提供一个互相交流的平台,特地开通了官方交流群。扫描下方二维码备注 进群 或者关注公众号 Python人工智能编程 后获取进群通道。
添加好友,备注【进群】
—————END—————
推荐阅读:
一些你可能不知道的 Python 小技巧! 这波太炸了!Python脚本可视化居然可以这么玩! 碉堡!用Python简单爬取起点中文网小说 手把手教你用Python实现批量文件的压缩处理 如何用 Python 来绘制玫瑰图等常见疫情图
最近面试BAT,整理一份Python资料《Python学习手册》,覆盖了Python知识点、人工智能、深度学习、机器学习等方面。
获取方式:关注公众号并回复 Python 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
文章评论