聲明:
1)僅作為個人學習,如有冒犯,告知速刪!
2)不想誤導,如有錯誤,不吝指教!
-
簡介
------------------文件存儲------------------
-
TXT文本存儲
-
JSON文件存儲
-
CSV文件存儲
------------------關系型數據庫---------------
-
MySQL存儲
------------------非關系數據庫---------------
-
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是不一樣的,這個是怎么回事??
這樣我們直接請求這個網址后得到的就是一個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 = pd.read_csv("name.csv") 11 print(df)
這個要比第一個方式舒服很多。。。。。
------------------------------------分隔符---------------------------------
-
-
DML
(數據操作語言)------>對表中的記錄操作增刪改查 -
DQL
(數據查詢語言)------>對表中的查詢操作 -
DCL
(數據控制語言)------>對用戶權限的設置
一:DDl
:
創建:
-
create database 數據庫名;
-
create database 數據庫名 if not exits;
-
create database 數據庫名 character set 字符集;
-
show databases;
-
select create database 數據庫名;
修改:
alter database 數據庫名 default character set 字符集;
刪除:
drop database 數據庫名;
使用數據庫:
select database(); ----->查看正在使用的數據庫
use 數據庫名;------->使用/切換數據庫
DDL
表操作:
create table 表名(字段1,字段類型,字段2,字段類型);創建表
int\double\varchar\date
查:
show tables;---->查看當前數據庫中所有表
desc
表名; ----->查看表的結構
show create table 表名;---->查看創建表的sql
語句
創建:
create table 新表名 like 就表名; ---->快速創建一個與就舊表結構相同的的新表
刪除:
drop table 表名;----->直接刪除
drop table if exists 表名;----->判斷是否存在
改:
alter table 表名 add 列名 類型;----->添加表列 add
alter table 表名 modify 列名 新類型;------>添加列類型modify
alter table 表名 change 舊列 新列 類型;----->修改列名change
alter table 表名 drop 列名;----->刪除列
rename table 舊表 to 新表;----->修改表名
alter table 表名 character set 字符集;
二:DML
插入:
insert into 表名 (字段1,字段2.....) values(值1,值2......);----->插入全部字段
insert into 表名 values(值1,值2.....); ----->不寫字段名
insert into 表名 ( 字段1,2,3) values (值1,2,3); ----插入部分
select * from 表名;---->查表中信息
蠕蟲復制:
insert into 表1 select * from 表2 ;---->將表2中的所有列復制到表1中
insert into 表1 (列1,列2) select (列1,列2)from 表2;--->只復制部分列
更新:
update 表名(需更新) set 列名=值 [where 條件表達式];
update 表名 set 列名=值;
update 表名 set 列名=值 where 列名=值;
刪:
delete from 表名 [where 條件表達式];
delete from 表名;刪除全部數據
delete from 表名 where 字段(列) = 值;
truncate table 表名;----刪除整個表的所有記錄重建新表
查:
select 列名 from 表名;
select * from 表名:
select 列1,列2 from 表名;
清楚重復值: