3-數據存儲之文件存儲(1)
- 2019 年 11 月 8 日
- 筆記
-
簡介
——————文件存儲——————
-
TXT文本存儲
-
JSON文件存儲
-
CSV文件存儲
——————關係型資料庫—————
-
MySQL存儲
——————非關係資料庫—————
-
Mongodb
-
redis
一 簡單介紹:
我們前面很少將提取的數據或者獲取的源碼保存下來;其實日常的工作中在解析出數據後接下來就是存儲數據。
保存數據的形式有多種多樣txtjsoncsvmysqlmobgodbredis
,接下來我們一一介紹。
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 = read_csv("name.csv") 11 print(df)
這個要比第一個方式舒服很多。。。。。