python各數據存儲方法


 聲明:

   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是不一樣的,這個是怎么回事??

原來使用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 = pd.read_csv("name.csv") 11 print(df)
這個要比第一個方式舒服很多。。。。。

4)mysql部分:

------------------------------------分隔符---------------------------------

  1. DDL(數據定義語言)------>建庫,建表

  2. DML(數據操作語言)------>對表中的記錄操作增刪改查

  3. DQL(數據查詢語言)------>對表中的查詢操作

  4. DCL(數據控制語言)------>對用戶權限的設置

一:DDl

創建:
  1. create database 數據庫名;

  2. create database 數據庫名 if not exits;

  3. create database 數據庫名 character set 字符集;

  4. show databases;

  5. 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 表名;

 

清楚重復值:

  select distinct 列名 from 表名;

----------------------------分隔符-------------------------

未完待續!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM