Python——数据存储的三种方法

一、CSV文件
1、导入

由于是python自带的库,无需安装就可以使用,只要使用下面命令就可以导入

import csv
2 、使用方法
2.1 从csv文件读入数据
import csv
#使用open函数打开csv文件
with open('mc.csv','r')as f:
    #reader是一个迭代器,for循环来打印,返回的是列表
    reader = csv.reader(f)
    #第一行开始遍历,表示标题数据去除(自选)
    next(reader)
    for read in reader:
        #只打印第0行的数据
        data = read[0]
        print(data)
2.2 把数据写入csv文件
import csv
#写入的数据
headers = ['name', 'age', 'height']
value = [
    ('张氏','13','160'),
    ('李氏','18','180')
]
#使用open函数把数据写到csv文件(text.csv文件要在当前目录下,如果不在则填写路径)
with open('text.csv','w',encoding='utf-8',newline='') as f:
    #生成一个writer对象
    writer = csv.writer(f)
    #读取一行使用writerow方法
    writer.writerow(headers)
    #读取多行使用writerows方法
    writer.writerows(value)

执行后的结果:

name,age,height
张氏,13,160
李氏,18,180

小知识:csv文件的格式为逗号分隔值文件格式,可以通过excel打开,也可以另存为xls文件

3、实战

使用上次我们爬取的酷狗音乐TOP排行榜的数据来保存为csv文件,数据获取方面我就不再详细讲到,具体可以看最下面的链接,这次使用的是正则表达式来获取数据

import requests
from fake_useragent import UserAgent
import re
import csv
url = "https://www.kugou.com/yy/rank/home/1-8888.html?from=rank"
headers = {
    "User-Agent": UserAgent().random
}
#写入的csv文件的第一行
head =['排名', '歌名', '时长']

response = requests.get(url, headers=headers)
response.content.decode("utf-8")
text = response.text
songnames = re.findall(r'<li class=" " title=.*?>.*?<a.*?>(.*?)</a>', text, re.S)
songtimes = re.findall(r'<span class="pc_temp_time">(.*?)</span>', text, re.S)

#定义一个列表
list = []
count = 0
for i in zip(songnames,songtimes):
    songname,songtime = i
    count +=1
    #保存为元组的格式,之前小编保存为列表形式,但是数据出现了混乱,至今没有搞懂,有清楚的大佬记得留个言
    data = (count,songname,songtime.replace("\t","").replace("\n",""))
    list.append(data)
    
with open("song.csv", 'w',newline='') as f:
    writer = csv.writer(f)
    writer.writerow(head)
    writer.writerows(list)

执行后的结果(如下图):
在这里插入图片描述

二、excel文件
1、导入
1.1 xlwt库:Python 用来在 Excel 写入数据和格式化数据的工具包,安装如下
pip install xlwt

注意:只能新建excel表格,不能修改

1.2 xlrd库:Python 用来在 读取Excel 数据的数据包,安装如下:
pip intall xlrd
2、使用方法
2.1 xlwt库:写入数据
#写入一个九九乘法表

#导入xlwt库
import xlwt
#创建workbook对象
workbook = xlwt.Workbook(encoding='utf-8')
#使用add_sheet方法添加一个sheet页面
worksheet = workbook.add_sheet('sheet1')

head = ['九九乘法表']
#写入主体部分
for j in range(0,1):
      #在worksheet下使用write方法,第一个参数为行,第二个参数为列,第三个为值
      worksheet.write(0,j,head[j])
for i in range(0,9):
    for j in range(0,i+1):
        worksheet.write(i+1,j,'%d * %d = %d'%(i+1, j+1, (i+1)*(j+1)))
#保存数据表
workbook.save('zaojiao.xls')

执行后的结果如下图:

在这里插入图片描述

2.2 xlrd库:读取数据
#一些常用的使用方法,这里只打印了所有行的值,其他的也可以试着打印出来

import xlrd
#先新建一个excel对象
book = xlrd.open_workbook('zaojiao.xls')
#获取下标获取sheet页数
sheet = book.sheet_by_index(0)
#或者通过名字获取sheet页面
#sheet = book.sheet_by_name()

#获取sheet中的行数
row = sheet.nrows
#获取sheet的列数
col = sheet.ncols

#通过单元格获取
cell = sheet.cell(1,1).value
cell_1 = sheet.row(2)[1].value
cell_2 = sheet.col(1)[1].value

#获取第0行的值
row_vaule = sheet.row_values(0)
#获取第0列的值
col_vaule = sheet.col_values(0)

#获取行里面的值
for i in range(row):
    print(sheet.row_values(i))
执行后的结果(获取所有行的值):
['九九乘法表', '', '', '', '', '', '', '', '']
['1 * 1 = 1', '', '', '', '', '', '', '', '']
['2 * 1 = 2', '2 * 2 = 4', '', '', '', '', '', '', '']
['3 * 1 = 3', '3 * 2 = 6', '3 * 3 = 9', '', '', '', '', '', '']
['4 * 1 = 4', '4 * 2 = 8', '4 * 3 = 12', '4 * 4 = 16', '', '', '', '', '']
['5 * 1 = 5', '5 * 2 = 10', '5 * 3 = 15', '5 * 4 = 20', '5 * 5 = 25', '', '', '', '']
['6 * 1 = 6', '6 * 2 = 12', '6 * 3 = 18', '6 * 4 = 24', '6 * 5 = 30', '6 * 6 = 36', '', '', '']
['7 * 1 = 7', '7 * 2 = 14', '7 * 3 = 21', '7 * 4 = 28', '7 * 5 = 35', '7 * 6 = 42', '7 * 7 = 49', '', '']
['8 * 1 = 8', '8 * 2 = 16', '8 * 3 = 24', '8 * 4 = 32', '8 * 5 = 40', '8 * 6 = 48', '8 * 7 = 56', '8 * 8 = 64', '']
['9 * 1 = 9', '9 * 2 = 18', '9 * 3 = 27', '9 * 4 = 36', '9 * 5 = 45', '9 * 6 = 54', '9 * 7 = 63', '9 * 8 = 72', '9 * 9 = 81']

Process finished with exit code 0

3、实战

使用上次我们爬取的酷狗音乐TOP排行榜的数据来写入到excel文件中,数据获取方面我就不再详细讲到,具体可以看最下面的链接,这次使用的是正则表达式来获取数据

import requests
from fake_useragent import UserAgent
import re
import xlwt
url = "https://www.kugou.com/yy/rank/home/1-8888.html?from=rank"
headers = {
    "User-Agent": UserAgent().random
}

response = requests.get(url, headers=headers)
response.content.decode("utf-8")
text = response.text
songnames = re.findall(r'<li class=" " title=.*?>.*?<a.*?>(.*?)</a>', text, re.S)
songtimes = re.findall(r'<span class="pc_temp_time">(.*?)</span>', text, re.S)

#定义一个列表
list = []
#排名
count = 0
for i in zip(songnames,songtimes):
    songname,songtime = i
    count +=1
    data = (count,songname,songtime.replace("\t","").replace("\n",""))
    list.append(data)
    
#创建一个Workbook对象,这就相当于创建了一个Excel文件,名称为book,style_compression表示是否压缩
book = xlwt.Workbook(encoding='utf-8', style_compression=0)

#在book中创建一个sheet对象,这就相当与在execl文件中创建了一张sheet表
#其中的‘酷狗音乐TOP’是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格
sheet = book.add_sheet('酷狗音乐TOP', cell_overwrite_ok=True)

#写入表头
col = ('排名', '歌曲名称', '时长')
for i in range(0, 3):
    sheet.write(0, i, col[i])#write方法,参数分别为行数,列数,传入的值

#写入主体部分
for i in range(0, 22):
    datalist = list[i]
    for j in range(0, 3):
        sheet.write(i+1, j, datalist[j])

#最后用save保存下来,文件名为Top.xls
book.save('Top.xls')

执行后的结果:

在这里插入图片描述

三、mysql数据库+SQLyog
1、安装
1.1 mysql数据库的安装(详细的安装教程可以在网上寻找)

推荐的安装教程:

https://blog.csdn.net/bobo553443/article/details/81383194

官网地址:

https://dev.mysql.com/downloads/mysql/
1.2 SQLyog的安装
百度网盘链接: https://pan.baidu.com/s/1tPzfbHl0GpHuVX-lmFPhzA 提取码: xrf6
官方链接:https://sqlyog.en.softonic.com/

SQLyog 是一个快速而简洁的图形化管理MYSQL数据库的工具

2、 导入
PyMySQL库: Python3.x 版本中用于连接 MySQL 服务器的库
pip install pymysql
3、基本使用
#在mysql的数据库中创建一个表格
import pymysql
 
# 连接database
conn = pymysql.connect(
    host=“你的数据库地址(如localhost)”,
    user=“用户名”,password=“密码”,
    database=“数据库名”,port=“端口号”
    charset=“utf8”)
 
# 得到一个可以执行SQL语句的光标对象cursor
cursor = conn.cursor()  
# 得到一个可以执行SQL语句的游标
#cursor = conn.cursor()
 
# 定义要执行的SQL语句
sql = """
CREATE TABLE `USER1` (
`id` INT auto_increment PRIMARY KEY ,
`name` CHAR(10) NOT NULL UNIQUE,
`age` TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8;  #注意:charset='utf8' 不能写成utf-8
"""
 
# 执行SQL语句
cursor.execute(sql)

#映射到数据库上
conn.commit()

# 关闭光标对象
cursor.close()
 
# 关闭数据库连接
conn.close()
3.实战

mysql数据库含有很多的知识点,涉及到数据库的操作和sql语句的编写,大家课后可以去看sql语句的编写方法,涉及到修改、删除、插入等等操作

使用上次我们爬取的酷狗音乐TOP排行榜的pa数据来写入到数据库中,数据获取方面我就不再详细讲到,具体可以看最下面的链接,这次使用的是xpath来获取数据

import pymysql
import requests
from lxml import etree
from fake_useragent import UserAgent

headers = {
    "User-Agent": UserAgent().random
}

conn = pymysql.connect(host='localhost', user='root', password='小编的密码(这里隐去)',
                       database='mydb', port=3306, charset='utf8')
cursor = conn.cursor()
#防止与mysql连接中断
conn.ping(reconnect=True)

#定义一个函数来获取数据并返回一个列表
def get_data(url):
    list=[]
    response = requests.get(url,headers=headers)
    response.encoding='utf-8'
    trees = etree.HTML(response.text)
    ranks = trees.xpath("//div/ul/li/@data-index")
    songnames = trees.xpath('//div/ul/li/a[@class="pc_temp_songname"]/text()')
    songtimes = trees.xpath('//div/ul/li/span/span[@class="pc_temp_time"]/text()')
    for i in zip(ranks, songnames, songtimes):
        rank, songname, songtime = i
        data = (int(rank) + 1, songname, songtime.replace("\t", "").replace("\n", ""))
        list.append(data)
    return list
    
#定义一个函数来把数据插入mysql数据库中
def insert_mysql(list):
	#sql语句,表名为song_list,各列名为rank,song,time
    sql = "insert into song_list(`rank`,`song`,`time`) values (%s,%s,%s)"
    
    #将得到的list进行遍历从下标取值,将(li[0], li[1], li[2])映射(%s,%s,%s)上
    for li in list:
        cursor.execute(sql, (li[0], li[1], li[2]))
        conn.commit()


if __name__ == '__main__':
    url = "https://www.kugzhiou.com/yy/rank/home/1-8888.html?from=rank"
    alist = get_data(url)
    insert_mysql(alist)
    cursor.close()
    conn.close()
执行后的结果:

在这里插入图片描述

写在最后

数据获取的链接

数据获取的三种方法:https://blog.csdn.net/weixin_45127640/article/details/106120189
感谢你的观看,如果在这个过程的中遇到什么问题或者错误,可以随时留言,欢迎大家指正批评
  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值