利用社交网站做淘宝客,计算机信息网络系统,网页设计和网站建设的课程设计,室内设计素材网站哪个最好学python#xff0c;操作数据库是必不可少的#xff0c;不光要会写python代码#xff0c;还要会写SQL语句#xff0c;本篇文章主要讲如何把本地txt文件中的数据读取出来并写入到对应的数据库中#xff0c;同时将数据库单个表中的数据读出来保存在本地txt文件中。
话不多说…
学python操作数据库是必不可少的不光要会写python代码还要会写SQL语句本篇文章主要讲如何把本地txt文件中的数据读取出来并写入到对应的数据库中同时将数据库单个表中的数据读出来保存在本地txt文件中。
话不多说我们开始吧 读取文件数据写入到数据库 读取文件数据并封装
有两个txt文件一个是普通文本格式一个是json格式部分数据截图见本篇文章的最后附录部分。一个是2011年的1月份销售数据一个是2011年的2月份销售数据我们需要分别读出这两个文件的数据并写入同一个表中。
1月份数据是普通文本使用逗号分割数据记录从前到后分别是(日期订单id销售额销售省份)
2月份数据是JSON数据同样包含 (日期订单id销售额销售省份)
根据面向对象的思想我们可以设计一个FileReader类进行数据的读取我们读取到的数据也可以封装到一个类里面叫做数据封装类也就是每一条数据都可以得到一个具体的类对象
1数据定义的类
设计一个类完成数据封装新建一个python文件名为data_define.py根据数据的分析成员变量包含 date, order_id, money, province # 数据定义的类
class Record:def __init__(self, date, order_id, money, province):self.date date # 订单日期self.order_id order_id # 订单IDself.money money # 订单金额self.province province # 销售省份def __str__(self):return f{self.date}, {self.order_id}, {self.money}, {self.province}2定义文件相关的类
设计一个抽象类定义文件读取的相关功能并使用子类实现具体功能因为文件的数据格式不同我们读取文件的具体实现逻辑也不一样所以定义一个抽象类通过子类去实现具体数据的具体读取方法。
新建一个python文件名为file_define.py,先定义一个抽象类FileRecord用来做顶层设计确定有哪些功能read_data方法需要实现并分别定义TextFileRecord类和JsonFileRecord类继承FileRecord类复写父类的read_data方法
具体代码如下 from data_define import Record
import json# 先定义一个抽象类用来做顶层设计确定有哪些功能需要实现
class FileRecord:def read_data(self) - list[Record]:# 读取文件的数据读到的每一条数据都转换为Record对象将他们都封装到List内并返回即可passclass TextFileRecord(FileRecord):def __init__(self, path):self.path path # 定义成员变量记录文件路径# 复写实现抽象方法父类的方法def read_data(self) - list[Record]:f open(self.path, r, encodingUTF-8)record_list: list[Record] []for line in f.readlines():line line.strip() # 消除读取到的每一行数据中的\ndata_list line.split(,)record Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])record_list.append(record)# print(record_list)f.close()return record_listclass JsonFileRecord(FileRecord):def __init__(self, path):self.path path # 定义成员变量记录文件路径# 复写实现抽象方法父类的方法def read_data(self) - list[Record]:f open(self.path, r, encodingUTF-8)record_list: list[Record] []for line in f.readlines():data_dict json.loads(line)record Record(data_dict[date], data_dict[order_id], data_dict[money], data_dict[province])record_list.append(record)# print(record_list)f.close()return record_listif __name__ __main__:# 测试读取文本文件text_file_record TextFileRecord(G:\资料\2011年1月销售数据.txt)lin1 text_file_record.read_data()for l1 in lin1:print(l1)# 测试读取json文件json_file_record JsonFileRecord(G:\资料\2011年2月销售数据JSON.txt)lin2 json_file_record.read_data()for l2 in lin2:print(l2)运行结果 3合并数据
新建一个python文件main.py读取数据并将1月份数据和2月份数据合并 from file_define import FileRecord, TextFileRecord, JsonFileRecord
from data_define import Recordtext_file_record TextFileRecord(G:\资料\2011年1月销售数据.txt)
json_file_record JsonFileRecord(G:\资料\2011年2月销售数据JSON.txt)
jan_data: list[Record] text_file_record.read_data() # 读取1月份数据并保存到jan_data
feb_data: list[Record] json_file_record.read_data() # 读取2月份数据并保存到feb_data
all_data: list[Record] jan_data feb_data # 合并两个月份的数据
# print(all_data)合并数据之后的结果 构建数据库链接并写入数据库
我们首先需要导包from pymysql import Connection我在代码中分别创建了sell数据库和orders表其实可以直接通过数据库可视化工具创建创建完成后直接执行insert插入语句即可参考代码如下
# 构建数据库链接
conn Connection(hostlocalhost,port3306,userroot,password123456,autocommitTrue # 执行sql语句时自动提交
)
# 构建游标对象
cur conn.cursor()
cur.execute(SHOW DATABASES)
database_list []
for db in cur:database_list.append(db[0])
print(database_list) # 打印出当前所有数据库
if sell in database_list: # 如果数据库存在则不创建如果不存在则创建数据库sellpass
else:creat_data_base CREATE DATABASE sellcur.execute(creat_data_base)conn.select_db(sell)
cur.execute(SHOW TABLES)
tab_list []
for tab in cur:tab_list.append(tab[0])
print(tab_list) # 打印当前库中的所有表
if orders in tab_list: # 如果表存在则不创建如果不存在则创建表orderspass
else:cur.execute(CREATE TABLE orders(order_date DATE,order_id VARCHAR(255),money INT,province VARCHAR(10)))
# 遍历所有数据并执行插入语句
for record in all_data:sql fINSERT INTO sell.orders(order_date,order_id,money,province) VALUES ({record.date},{record.order_id},{record.money},{record.province})print(sql)cur.execute(sql)# 关闭数据库链接
cur.close()运行代码成功之后可在数据库中看到数据已经正常写入orders表中 从数据库读取数据并保存到本地
相对写入数据来说读取数据保存到本地更加简单先从数据库读取数据然后处理数据之后保存到本地文件即可。
1保存为txt文件
代码如下
from pymysql import Connection
from data_define import Record# 构建数据库链接
conn Connection(hostlocalhost,port3306,userroot,password123456,autocommitTrue # 执行sql语句时自动提交
)
# 构建游标对象
cur conn.cursor()
cur.execute(select * from sell.orders) # 读取orders表中的所有数据record_list []
for data in cur:record Record(data[0], data[1], data[2], data[3])record_list.append(record) # 将读取的每一数据封装成一个Record对象并添加到record_list列表中f open(E:\sell_orders_data.txt, w) # 文件存在则直接覆盖文件中的内容写入不存在先创建文件再写入数据
for sell_data in record_list:# 只能写入str类型的则把读取的Record对象转化为str每个字段用,分割str_data str(sell_data.date) , sell_data.order_id , str(sell_data.money) , sell_data.provincef.write(str_data)f.write(\n)
f.close()查看保存的txt文件 2保存为excel文件
代码如下
import xlwt
# 写入到excel文件中
# 调用xlwt模块中的Workbook方法来创建一个excel表格类型文件style_compression设置是否压缩赋值为0表示不压缩。
book xlwt.Workbook(encodingutf-8, style_compression0)
# 用book对象调用add_sheet方法来建立一张sheet表这里面的第一个参数很明显就是设置sheet表格的名称第二个参数cell_overwrite_ok用于确认同一个cell单元是否可以重设值这里赋值为True就表示可重设值。
sheet book.add_sheet(销售数据表, cell_overwrite_okTrue)
# 用一个元组col自定义列的数量以及各列的属性名
col (销售日期, 订单ID, 销售额, 省份)
# 写入表头
for i in range(0, 4):sheet.col(i).width 5000 # 设置宽度sheet.write(0, i, col[i])
datastyle xlwt.XFStyle() # 创建一个样式对象初始化样式
datastyle.num_format_str yyyy-mm-dd # 设置日期格式
# 循环record_list数据并写入
for row in range(1, len(record_list) 1):sheet.write(row, 0, record_list[row - 1].date, datastyle) # 如果不加datastyle写出来的日期列格式是不对的sheet.write(row, 1, record_list[row - 1].order_id)sheet.write(row, 2, record_list[row - 1].money)sheet.write(row, 3, record_list[row - 1].province)book.save(E:\订单销售额.xls)f.close()查看保存的excel文件 附录 行动吧在路上总比一直观望的要好未来的你肯定会感 谢现在拼搏的自己如果想学习提升找不到资料没人答疑解惑时请及时加入扣群 320231853里面有各种软件测试开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走
这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你