常用数据存储的介绍和使用

本文内容介绍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('
'.join([question, author, answer]))
        f.write('
' + '=' * 50 + '
')
'''
保存文本内容:
一年时间可以熟背新概念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('
'.join([data_json, data_json2, data_json3]))

'''
输出内容:
{"name": ["dmr", "asx", "u9017u6bd4"], "age": "25"}
{
  "name": [
    "dmr",
    "asx",
    "u9017u6bd4"
  ],
  "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

  pymongo模块:https://www.cnblogs.com/Caiyundo/p/9480265.html

  redis模块:https://www.cnblogs.com/Caiyundo/p/9561548.html

原文地址:https://www.cnblogs.com/Caiyundo/p/12512605.html