一、文件存儲
1. TXT文本存儲
代碼有不明白的 歡迎來微信公眾號“他她自由行”找我,回復任何話都可以 我都會回你噠~
例:知乎發現頁面,獲得數據存成TXT文本
import requests
from pyquery import PyQuery as pq
url="https://www.zhihu.com/explore"
headers={'User-Agent':'ozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E5216a QQ/7.5.5.426 V1_IPH_SQ_7.5.5_1_APP_A Pixel/1080 Core/UIWebView Device/Apple(iPhone 8Plus) NetType/WIFI QBWebViewType/1'
}
html=requests.get(url,headers=headers).text
doc=pq(html)
#問題列表
items=doc('.explore-tab .feed-item').items()
for item in items:
question=item.find('h2').text()
author=item.find('.author-link').text()
answer=pq(item.find('.content').html()).text()
with open('zhihu_explore.text','a',encoding='utf-8') as file:
file.write('\n'.join([question,author,answer]))
file.write('\n'+'='*50+'\n')
注意:
- 在用pyquery解析時,一定要找准屬性進行匹配;
- 打開文件open()函數第二個參數設置為a,其他值:
r:以只讀方式打開文件
w:以寫入方式打開文件(覆蓋之前文件)
a:以追加方式打開文件(不覆蓋之前文件,追加上)
特:后面跟 + :代表以讀寫方式打開文件
后面跟 b :代表以二進制方式打開文件
3.每次open()打開文件后都要用close()關閉,直接用 with as 語句,會自動關閉文件。
2.JSON文件存儲
JSON,是JavaScript對象標記,通過對象和數組的組合來表示數據
對象:數據結構為{key1:value1,key2:value2,...}的鍵值對結構
數組:數據結構為['Java','javascript','vb',...]的索引結構
(1)讀取JSON文件
loads():把數據從JSON文本字符串轉為JSON對象
dumps():把數據從JSON對象轉為文本字符串
data=json.loads(str) //type(data)是list對象
str=json.dumps(data) //type(str)是字符串
獲取屬性值:
data[0]['name'] 或
data[0].get('name') //兩種方式獲取第一個元素的name屬性的值;
.get('name',tom) //.get()方式更好:當沒有name值時,會報None且可以用用第二個參數設定默認值
讀取:
import json
with open('data.json','r') as file:
str=file.read()
data=json.loads(str)
注意:
- JSON的數據需要雙引號來包圍。
- 在data.json文件中是以字符串存在,讀取時要用loads()轉成JSON對象來應用,存儲時用dumps()把JSON對象存成字符串。
(2)輸出JSON,寫入文件
with open('data.json','w') as file:
file.write(json.dumps(data,indent=2,ensure_ascii=False)) //indent是縮進個數,ensure_ascii是防止中文被編譯成ascii碼
3.csv文件存儲
csv,叫作逗號分隔值或字符分隔值,以純文本形式存儲表格數據。
(1) 寫入
import csv
with open('data.csv','w') as csvfile:
writer=csv.writer(csvfile) //初始化寫入對象
writer.writerow(['id','name','age'])
writer.writerow(['10001','Mike','20'])
writer.writerow(['10002','Bob','23'])
writer.writerow(['10003','Jordan','21'])
這樣就會生成一個data.csv文件
特:
- writer=csv.writer(csvfile,delimiter=' ') 意味着將列與列間的分隔符,變成空格分隔符
- writer.writerow([['10001','Mike','20'],['10002','BOb','23'],['10003','Jordan','21']])
以二維列表的形式寫入 - 字典形式寫入:
import csv
with open('data.csv','w') as csvfile:
filename=['id','name','age'] //定義寫入名稱
writer=csv.DictWriter(csvfile,filename=filename) //初始化一個字典寫入對象
writer.writeheader() //寫入頭信息
writer.writerow({'id':'10001','name':'Mike','age':20})
writer.writerow({'id':'10002','name':'Bob','age':23})
注意:如果name='李明',則要改變編碼方式open('data.csv','w',encoding='utf-8') 變成中文編碼
(2)讀取
(1 利用csv庫讀取:
import csv
with open('data.csv','r','utf-8') as csvfile:
reader=csv.reader(csvfile)
for row in reader:
print(row)
//按行輸出數據
(2 利用pandas讀取:
(pandas是數據分析當中非常重要的一個庫,在我的數據分析博客中會提及很多次)
import pandas as pd
df=pd.read_csv('data.csv')
print(df)
