常用数据存储的介绍和使用
本文内容介绍python和如下数据存储交互的基本使用:
文件存储:TXT、JSON、CSV
关系型数据库:Mysql(pymysql模块)
非关系型数据库:MongoDB(pymongo模块)、Redis(redis模块)
1. 文本存储;简单实例,爬取知乎话题、答者和回答内容保存到txt文件中
## 文本存储;简单实例,爬取知乎话题、答者和回答内容保存到txt文件中 from pyquery import PyQuery as pq import requests url = 'https://www.zhihu.com/explore' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36' } html = requests.get(url=url, headers=headers).text doc = pq(html) items = doc.find('.ExploreCollectionCard-contentItem').items() for item in items: question = item('.ExploreCollectionCard-contentTitle').text() author = item('.ExploreCollectionCard-contentExcerpt').text().split(':')[0] answer = ''.join(item('.ExploreCollectionCard-contentExcerpt').text().split(':')[1:]) with open('zhihu_explore.txt', 'a', encoding='utf-8') as f: f.write('\n'.join([question, author, answer])) f.write('\n' + '=' * 50 + '\n')
''' 保存文本内容: 一年时间可以熟背新概念3.4册课文吗? lu luce 可以的。。我成功完成了。方法是王江涛六步法。。请看我这个英语学习方法人肉实验员的人肉实验结果。人肉实验者飘过。。。我检查了我的学习日志。一年左右时间背完新概念1234四册的飘过。从2016年12月开始,背到2018年三月份。从2016年12月开始,到2017年4… ================================================== 有没有什么可以放昵称的超级好看的符号? 雨停花落故人散 超级可爱呀⁰¹²³⁴⁵⁶⁷⁸⁹ ¹⁹⁹⁴ ²⁰⁰⁷ ¹⁹⁹⁵ ²⁰⁰⁸ ¹⁹⁹⁶ ²⁰⁰⁹ ¹⁹⁹⁷ ²⁰¹⁰ ¹⁹⁹⁸ ²⁰¹¹ ¹⁹⁹⁹ … ================================================== 有哪些推翻了人们对历史的认识的考古发现? 清源文化遗产 2002年,在青海喇家遗址,考古队员们意外发现了4000年前扣翻在地上的一碗面条凑近看这只倒扣的齐家文化篮纹红陶碗,碗内的残留物中保留着清晰可见的团状细条卷曲痕迹的黄色物质,风化很严重,只残留表皮一点薄薄的物质经科学鉴定,发现其中的主要成分和粟、… ================================================== 白酒真的好喝么? 许公子 送你一份酒水清单,全部喝一遍再来问好不好喝。 两年前,我滴酒不沾,喝白酒只有一个味辣。 初尝白酒是抖音里那杯“情人的眼泪”。 谈不上好喝,也说不上难喝,主要是内心那点文艺作祟;随着工作压力的增大以及工作需要,喝酒、品酒变成了日常,才发现酒… ================================================== 传统方法BM25解决短文本相似度问题 刘聪NLP 之前介绍过TF-IDF计算短文本相似度,见刘聪NLP传统方法TF-IDF解决短文本相似度问题,想着就把这一系列都介绍完吧,也算是自己的归纳总结,今天就介绍一下如何使用BM25算法计算短文本相似度。上一篇短文本相似度算法研究文章中,我们举过这样一个场景,在… ================================================== 香侬读 | ReZero: 使用加权残差连接加速深度模型收敛 香侬科技 论文标题ReZero is All You Need: Fast Convergence at Large Depth论文作者Thomas Bachlechner, Bodhisattwa Prasad Majumder, Huanru Henry Mao, Garrison W. Cottrell, Julian McAuley 论文链接https://arxiv.org/abs/2003.04887代码连接https://github.com/majumderb/rezero… ================================================== 100个素材网站,这辈子都用不完 知乎用户 好久没给大家分享资源了,是不是最近也是非常饥渴。好东西就要分享才对,所以以下资源就当是福利啦! 谷歌扁平化设计手册 https://material.google.com/ 国内学习网站 http://www.wanyouyingli.com/ 常见函数图表 http://easings.net/zh-cn 国内畅游视觉设计中心 … ================================================== 你都见过什么奇奇怪怪的网站? 林简明 我的收藏夹小金库又要大出血了!(宝藏男孩出击!末尾有彩蛋~1、马克思主义文库我们以前总开玩笑说“马特好难,考的都是什么玩意”。但你不知道有一群默默无闻的群体,他们不求回报,一心为了这份事业耕耘着。网站收集来自全世界过去、现在以及未来为共产… ================================================== '''
2. JSON文件存储
## JSON文件存储 ## JSON中两种常用的类型:对象和数组,可以理解为python中的字典和列表,两者可以互相嵌套 ## 读取JSON,JSON字符串的数据一定要用双引号表示,否则会解析失败 import json str = ''' [ {"name":"dmr", "age":"25", "score":"80"}, {"name":"asx", "age":"23", "score":"81"} ] ''' print(type(str)) str = json.loads(str) print(type(str)) # 读取value,通过字典的get方法,当key不存在时,不会报错,会返回None print(str[0]['name']) print(str[0].get('age')) ''' 输出内容: <class 'str'> <class 'list'> dmr 25 ''' ## 写入JSON,字典转换成JSON字符串格式,json会自动识别格式并修正转换,如单引号改为双引号 import json d = { 'name': ['dmr', 'asx', '逗比'], 'age': '25', } # 把特定格式数据转换成JSON格式 data_json = json.dumps(d) # indent,指定缩进字符量 data_json2 = json.dumps(d, indent=2) # ensure_ascii使内容可以以中文显示 data_json3 = json.dumps(d, indent=2, ensure_ascii=False) print(data_json) print(data_json2) print(data_json3) # 保存JSON内容到文件中 with open('data.json', 'w', encoding='utf-8') as f: f.write('\n'.join([data_json, data_json2, data_json3])) ''' 输出内容: {"name": ["dmr", "asx", "\u9017\u6bd4"], "age": "25"} { "name": [ "dmr", "asx", "\u9017\u6bd4" ], "age": "25" } { "name": [ "dmr", "asx", "逗比" ], "age": "25" } '''
3. CSV文件,以纯文本形式存储表格数据
## CSV文件,以纯文本形式存储表格数据 ## 写入 import csv with open('data.csv', 'w') as csvf: # 获得文件句柄 writer = csv.writer(csvf) # 获得文件句柄并指定分隔符 writer2 = csv.writer(csvf, delimiter=' ') # 写入行内容 writer.writerow(['id', 'name', 'age']) writer.writerow(['0001', 'dmr', '25']) writer.writerow(['0002', 'asx', '23']) writer.writerow(['0003', 'scy', '26']) writer2.writerow(['0004', 'test', '22']) writer2.writerow('=================================') # 写入多行 writer2.writerows([['id', 'name', 'age'], ['0001', 'dmr', '25'], ['0003', 'scy', '26']]) writer2.writerow('=================================') # 通过字典形式进行文件添加内容 fieldnames = ['id', 'name', 'age'] writer3 = csv.DictWriter(csvf, fieldnames=fieldnames) # 生成fieldnames的首行 writer3.writeheader() # 写入内容 writer3.writerow({'id': '0001', 'name': 'dmr', 'age': '25'}) writer3.writerow({'id': '0002', 'name': 'asx', 'age': '23'}) writer3.writerow({'id': '0003', 'name': 'scy', 'age': '26'}) ## 读取 import csv with open('data.csv', 'r', encoding='utf-8') as csvf: reader = csv.reader(csvf) print(reader) for row in reader: print(row) # 用pandas模块进行文件读取 import pandas as pd data = pd.read_csv('data.csv') print(data)
4. 关系型数据库mysql
pymysql模块:https://www.cnblogs.com/Caiyundo/p/9578925.html
5. 非关系型数据库mongodb、redis
静静的学习一阵子儿...