3-数据存储之文件存储(1)

本节内容:

  • 简介html

    ------------------文件存储------------------python

  • TXT文本存储mysql

  • JSON文件存储redis

  • CSV文件存储sql

    ------------------关系型数据库---------------数据库

  • MySQL存储json

    ------------------非关系数据库---------------api

  • Mongodb安全

  • redis网络

一 简单介绍:

咱们前面不多将提取的数据或者获取的源码保存下来;其实平常的工做中在解析出数据后接下来就是存储数据。

保存数据的形式有多种多样txt\json\csv\mysql\mobgodb\redis,接下来咱们一一介绍。

1). txt文本存储:

python txt文件操做中离不开open()函数,它能够建立或者打开指定的文件,并建立一个文件对象 ,基本的语法:

1 open() 函数用于建立或打开指定文件,该函数的语法格式以下:
2 file = open(file_name,"文件打开方式")

文件打开的方式有如下几种:

模式 意义 注意事项
r 只读模式打开文件,读文件内容的指针会放在文件的开头。 操做的文件必须存在。
rb 以二进制格式、采用只读模式打开文件,读文件内容的指针位于文件的开头,通常用于非文本文件,如图片文件、音频文件等。  
r+ 打开文件后,既能够从头读取文件内容,也能够从开头向文件中写入新的内容,写入的新内容会覆盖文件中等长度的原有内容。  
rb+ 以二进制格式、采用读写模式打开文件,读写文件的指针会放在文件的开头,一般针对非文本文件(如音频文件)。  
w 以只写模式打开文件,若该文件存在,打开时会清空文件中原有的内容。 若文件存在,会清空其原有内容(覆盖文件);反之,则建立新文件。
wb 以二进制格式、只写模式打开文件,通常用于非文本文件(如音频文件)  
w+ 打开文件后,会对原有内容进行清空,并对该文件有读写权限。  
wb+ 以二进制格式、读写模式打开文件,通常用于非文本文件  
a 以追加模式打开一个文件,对文件只有写入权限,若是文件已经存在,文件指针将放在文件的末尾(即新写入内容会位于已有内容以后);反之,则会建立新文件。  
ab 以二进制格式打开文件,并采用追加模式,对文件只有写权限。若是该文件已存在,文件指针位于文件末尾(新写入文件会位于已有内容以后);反之,则建立新文件。  
a+ 以读写模式打开文件;若是文件存在,文件指针放在文件的末尾(新写入文件会位于已有内容以后);反之,则建立新文件。  
ab+ 以二进制模式打开文件,并采用追加模式,对文件具备读写权限,若是文件存在,则文件指针位于文件的末尾(新写入文件会位于已有内容以后);反之,则建立新文件。  

熟悉/了解上面的知识点后(详细信息:菜鸟教程/w3school),咱们实例一下;

小说网站:https://xs.sogou.com/mianfei/ 获取书名、简洁并保存为txt文件:

 1 import requests
 2 import json
 3 #设置ua
 4 headers = {
 5     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36",
 6 }
 7 #获取网页源代码
 8 r = requests.get("https://xs.sogou.com/api/pc/v1/activity/freeread/current?pageNo=1&pageSize=12",headers=headers).text
 9 #json格式一下
10 html = json.loads(r)
11 #接下来就是获取数据
12 name = html["data"]["pageList"]
13 for i in name:
14     bookName = i["bookName"]
15     content = i["description"]
16     #写入数据
17     with open("小说.txt","a",encoding="utf-8") as f:
18         f.write(bookName)
19         f.write(content)
20         f.write("\n"+ "==" * 20 + "\n")
21         print("已写入......")
22 with as的方式实现数据存储好处:不须要调用close()方法
23 以上写入还可使用:
24     file = open("小说.txt","a",encoding="utf-8" )
25     file.write(bookName)
26     file.write(content)
27     file.write("\n"+ "==" * 20 + "\n")
28     print("已写入......")
29 最后结果都是同样的

注:有细心的同窗发现我用的url跟网站的url是不同的,这个是怎么回事??

原来使用requests请求的出来的数据没有小说的信息(数据),抓包发现该网站是经过Ajax技术实现数据的请求,因此我找到 了该网站的API,如图所示:

这样咱们直接请求这个网址后获得的就是一个json的数据文件,以后咱们解析一下就能够了。

2). JSON文件存储:

先官方话了解一下: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。

JSON采用彻底独立于语言的文本格式,可是也使用了相似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。

这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(通常用于提高网络传输速率)。

你读一遍的话会懵逼的,不要慌,你暂时不要管,学习它经常使用的:

json: 用于字符串和python数据类型间进行转换 ,它提供四个功能 dumps、dump、loads、load ,用的比较多的是(loads,dumps)下面咱们学习下。

loads():将JSON文本字符串转换成JSON对象;

dumps():将JSON对象转换成JSON文本字符串;

 1 #在咱们上面的小说例子中,咱们使用的就是loads()
 2 import json
 3  4 test_dict = {'bigberg': [7600, {1: [['iPhone', 6300], ['Bike', 800], ['shirt', 300]]}]}
 5 print(test_dict)
 6 print(type(test_dict))
 7 #dumps 将数据转换成字符串
 8 json_str = json.dumps(test_dict)
 9 print(json_str)
10 print(type(json_str))
11 #loads: 将字符串转换为字典
12 new_dict = json.loads(json_str)
13 print(new_dict)
14 print(type(new_dict))

dump: 将数据写入json文件中 ; load:把文件打开,并把字符串变换为数据类型 ;有兴趣的同窗能够学习一下用法。

3). CSV文件存储:

使用csv文件存储,我理解的就是表格存储,Excel都用过吧,就是那个;接下来咱们分文件的写入跟读取两部分分开讲解,请系好安全带(若是非要介绍定义的话,请百度......我就是懒);

简单写入,首先打开一个csv文件,指定打开的模式而后使用write()方法初始化写入对象,最后调用writerow()方法传入每行的数据便可,代码以下:

1 import csv
2 #若是不加newline参数的话,会自动这只每行换行,以下图所示
3 #加上之后就不会出现下图的问题,小技巧,你值得拥有
4 with open("name.csv","w",newline="") as f:
5     writer = csv.writer(f)
6     #传入的是一个列表
7     writer.writerow(["num","name","age","sex"])
8     writer.writerow(["100","",12,""])
9     writer.writerow(["101","",13,""])

效果图以下:

能够看到还有排版的问题,更多的功能等你发掘;

简单读取:咱们须要构造reader对象,经过遍历的方式输出每行的信息;代码及效果图以下:

 1 import csv 
 2  3 with open("name.csv",'r') as f:
 4     reader = csv.reader(f)
 5     for i in reader:
 6         print(i)
 7  8 #接触到pandas的话你会了解到read_csv()方法:
 9 import pandas as pd
10 df = read_csv("name.csv")
11 print(df)
这个要比第一个方式舒服不少。。。。。

未完待续........

相关文章
相关标签/搜索