一, 文件存储
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)
来源: https://www.cnblogs.com/xubin97/p/10354508.html