数据存储

1.TXT 保存
open(name[, mode[, buffering]])
import requests
from pyquery import PyQuery as pq

url=‘https://www.zhihu.com/explore’
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Mobile Safari/537.36’
}
response = requests.get(url , headers=headers)
html=response.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-line’).text()
answeer = pq(item.find(’.content’).html()).text()
file = open(‘explore.txt’,‘a’,encoding=‘utf-8’)
file.write(’\n’.join([question,author,answeer]))
file.write(’\n’+’=’+’\n’)
file.close()
模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
文件写入简写:
with as
with open(‘explore.txt’,‘a’,encoding=‘utf-8’) as file:
file.write(’\n’.join([question,author,answeer]))
file.write(’\n’+’=’+’\n’)
JSon文件存储
读取JSON
可以调用JSon库的loads()方法将JSON文本字符串转为Json对象,通过dumps()对象将JSON对象转为文本字符串
str = ‘’’
[{
“name”:“Bob”,
“gender”:“male”,
“birthday”:“1992-10-18”
},{
“name”:“selina”,
“gender”:“female”,
“birthday”:“1992-10-18”
}]’’’

print(type(str))
data = json.loads(str)
print(data)
print(type(data))
输出Json:
可以通过调用dumps()方法将Json转化为字符串
import json
data = [{
}]

with open('data.json,‘w’) as file:
file.write(json.dumps(data))
indent代表缩进字符个数
with open(‘data.json1’,‘w’)as file:
file.write(json.dumps(data,indent=2))
如果包括中文:
file.write(json.dumps(data,indent=2,ensure_ascii=False))
CSV 文件存储
写入文本默认为,如果要修改分隔符,使用delimiter参数
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’, 30])
writer = csv.writer(csvfile,delimiter=’|)’)
也可使用writerows写入多行:
writer.writerows([‘10002’, ‘bob’, 30],[‘10004’, ‘jordan’, 30])
可以用字典方式写入:
writer =csv.DictWriter(csvfile,fieldnames=fieldnames)
追加写入:
with open(‘data.csv’,‘a’,encoding=‘utf-8’)
读取:
构造reader对象,通过遍历输出每行的内容
with open(‘data.csv’,‘r’) as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
关系型数据库:
数据库查询操作

Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
fetchall():接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

链接mySQL
https://www.runoob.com/python/python-mysql.html
import pymysql

db=pymysql.connect(host=‘localhost’,user=‘root’,password=‘123456’,port=3306)
cursor = db.cursor()
cursor.execute(‘select version()’)
data = cursor.fetchone()
print(‘Database version’,Data)
cursor.execute(‘create database spiders default character set utf8’)
db.close()

动态字典方式插入:
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。str.join(sequence)

insertData = {‘id’:‘20120001’,‘age’:20}

table = ‘students’
keys = ‘,’.join(data.keys())
values = ‘,’.join([’%s’]*len(insertData))
sql = ‘Insert into {table}({keys} VALUES ({values}) ON DUPLICATE KEY UPDATE’.format(table=table,keys=keys,values=values)
UPDATE = ‘,’.JOIN(["{KEY} = %S".format(key=key) for key in data])
sql + =update
try:
if cursor.execute(sql,tuple(data.values())):
print(‘success’)
db.commit()
except:
print(‘Failed’)
db.rollback()
db.close()

查询 :
sql = ‘Select * from students where age >=20’
try:
cursor.execute(sql)
print('Count:'cursor.rowCount())
row=cursor.fetchone()
while row:
print(‘row’:row)
row=cursor.fetchone()
except:
print(‘Error’)
非关系型数据库:
非关系数据库分为:
键值存储数据库:redies,voldemort
列存储数据库:Cassandra,HBase 和Riak
文档存储数据库:mongoDB
图形数据库:Neo4J .InfoGrid
MongoDB:
连接数据库:
import pymongo
client =pymongo.MongoClient(host=‘localhost’,port = 27017)
client = pymongo.MongoClient(‘mongodb://localhost:27017/’)
指定数据库:
db = client.test
db = client[‘test’]

指定集合:
mongoDB的每个数据库包括很多集合(collection)
collection= db.students
collection= db[‘students’]
插入数据:
insert_one() 和 insert_many()方法来插入单条记录和多条记录,可以通过inserted_id 获取_id
insertData = {‘id’:‘20120001’,‘age’:20}
result = collection.insert(student)
6.查询:
可以通过find_one() 或find()方法进行查询,find_one()查询到的是单个结果,find()返回一个生成器
result = collection.find_one({‘name’:‘Mike’})
from bson.objectid import ObjectId
result = collection.find_one(’_id’:ObjectId(’’))
对于多条查询,可以用find方法:
results = collection.find(‘age’:20)
查询年龄大于20岁:
results =collection.find(‘age’:{’$gt’:20})
$lt 小于
$gt 大于
$lte 小于等于
$gte 大于等于
$ne 不等于
$in 在范围内
KaTeX parse error: Expected '}', got 'EOF' at end of input: …n.find('name':{regex’:’^M.*’})
$Regex 匹配正则表达式
$exist 属性是否存在
$type 类型判断
$mod 数字模操作
$text 文本查询
w h e r e 高 级 条 件 查 询 计 数 : c o l e c t i o n . f i n d ( ) . c o u n t ( ) 排 序 : c o l l e c t i o n . f i n d ( ) . s o r t ( ′ n a m e ′ , p y m o n g o . A S C E N D I N G ) 偏 移 : 如 果 我 们 只 想 取 几 个 元 素 , 可 以 用 s k i p 放 到 偏 移 几 个 位 置 : c o l l e c t i o n . f i n d ( ) . s o r t ( ′ n a m e ′ , p y m o n g o . A S C E N D I N G ) . s k i p ( 2 ) 用 l i m i t ( ) 方 法 指 定 要 去 的 结 果 个 数 更 新 : 对 于 数 据 更 新 使 用 u p d a t e c o n d i t i o n = ′ n a m e ′ : ′ k e v i n ′ s t u d e n t = c o l l e c t i o n . f i n d o n e ( c o n d i t i o n ) s t u d e n t [ ′ a g e ′ ] = 25 r e s u l t = c o l l e c t i o n . u p d a t e ( c o n d i t i o n , s t u d e n t ) 可 以 使 用 where 高级条件查询 计数: colection.find().count() 排序: collection.find().sort('name',pymongo.ASCENDING) 偏移: 如果我们只想取几个元素 ,可以用skip 放到偏移几个位置: collection.find().sort('name',pymongo.ASCENDING).skip(2) 用limit()方法指定要去的结果个数 更新: 对于数据更新使用update condition = {'name':'kevin'} student = collection.find_one(condition) student['age']=25 result = collection.update(condition,student) 可以使用 wherecolection.find().count()collection.find().sort(name,pymongo.ASCENDING)skipcollection.find().sort(name,pymongo.ASCENDING).skip(2)limit()使updatecondition=name:kevinstudent=collection.findone(condition)student[age]=25result=collection.update(condition,student)使set 操作符对数据进行更新
result =collection.update(condition,{’$set’,student})
这样只更新字典中存在的字段
另外还有update_one()
update_many()
1.mySQL存储
Using pymysql
db=pymysql.connect(host=‘localhost’,user=‘root’,password=‘123456’,port=3306)
cursor = db.cursor()
cursor.execute(‘select version()’)
data = cursor.fetchone()
print(‘Database version’,Data)
cursor.execute(‘create database spiders default character set utf8’)
db.close()
根据字典的动态构造 元组也动态构造
Data={
‘id’:’2012001’,
‘name’:’bob’,
‘age’:20
}
Table=’student’
Keys=’,’.join(data.keys())
Value=’,’.join([‘%s’]*len(data))
Sql=’INSERT INTO {table}({keys} values({values})’.format(table=table,keys=keys,values=values)
try:
If cursor.execute(sql,tuple(data.values))):
Db.commit()
Except:db.rollback()
Db.close()

更新数据去掉重复的数据:

Data={
‘id’:’2012001’,
‘name’:’bob’,
‘age’:20
}
Table=’student’
Keys=’,’.join(data.keys())
Value=’,’.join([‘%s’]*len(data))
Sql=’INSERT INTO {table}({keys} values({values}) on DUCATE KEY UPDATE’.format(table=table,keys=keys,values=values)
Update=’,’.join([“{key}=%s”.format(key=key) for key in data])
Sql+=update
try:
If cursor.execute(sql,tuple(data.values)*2)):
Db.commit()
Except:db.rollback()
Db.close()
查询数据:
Cursor.rowcount() 获取查询结果的条数
Cursor.fetchone()获取第一条数据,元组形式
Cursor.fetchall()获取所有结果,二重元组
非关系向数据库:
1.键值存储数据库
2.列存储数据库
3.文档存储数据库
4.图形数据库
1.mongoDB
Import pymongo
Client =pymongo,MongoClient(host=’localhost’,port=27017)
指定数据库:
Db=Client.test
指定集合:
Collection=db.students
插入数据:
Data={
‘id’:’2012001’,
‘name’:’bob’,
‘age’:20
}
Result=collection.insert(student)
Result=collection.insert_many([student1,student2])
可以使用insert_one(),insert_many()进行单条和多条的插入。
查询:find_one() 单个结果 find()方法,返回一个生成器对象
计数:collection.find().count()
排序:collection.find().sort()
偏移:collection.find().sort().skip(2)
限制要取的个数:collection.find().sort().skip(2).limit(2)
更新:可以用update方法,
Con={‘name’:’kevin’}
Student=collection.find_one(Con)
Student[‘age’]=25
Result=collection.update(condition,student)
使用KaTeX parse error: Expected '}', got 'EOF' at end of input: …te(condition,{‘set’:student})
Update 方法也分为:update_one(),update_many()
删除:
Collection.remove({‘name’:’kevin’})
Delete 也可以分为delete_one()和delete_many()
Redis 存储
Redis-py 提供了两个类 Redis 和strictRedis来实现命令的操作
连接Redies:
From redis import StrictRedis
Redis=StrictRedis(host=’localhost’,port=6379,db=0,password=’’)
Redis.set()
Redis.get()
也可以使用connectionPool 来连接
Pool=connectionPool(host=’localhost’,port=6379,db=0,password=’’)
Redis=StrictRedis(connectionPool=pool)
connectionPool 支持URL
Url=’’
Pool=connectionPool.from_url(url)
Redis=StrictRedis(connectionPool=pool)
键操作:
字符串操作:
列表操作
集合操作:
有序集合操作
散列操作
RediesDump:
提供了强大的Redis 数据的导入和导出。
可以通过Redis-dump -h 获取命令信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值