本页代码可以在这里下载。

1.文件存储

(1)txt文本存储

r: 以只读方式打开文件。
rb:以二进制只读方式打开一个文件。
r+:以读写方式打开一个文件。
rb+:以二进制读写方式打开一个文件。
w:以写入方式打开一个文件。
wb:以二进制写入方式打开一个文件。
w+:以读写方式打开一个文件。
wb+:以二进制读写格式打开一个文件。
a:以追加方式打开一个文件。
ab:以二进制追加方式打开一个文件。
a+:以读写方式打开一个文件,追加。
ab+:以二进制追加方式打开一个文件。

(2)JSON文件存储

JSON全称JavaScript Object Notation 即JavaScript对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。
读取JSON

# json test -> read
str = '''
[{
    "name": "Sniper",
    "gender": "male"
    },{
    "name": "spider",
    "gender": "male"
    }]
'''
data = json.loads(str)
print(data)
print(data[0]['name'])
print(data[0].get('age'))

输出:

输出JSON:

# json test -> output to file
str = '''
[{
    "name": "Sniper",
    "gender": "male"
    },{
    "name": "spider",
    "gender": "male"
    }]
'''
with open('file/json/data.json', 'w') as file:
    file.write(json.dumps(str,ensure_ascii=False))

在文件中可以看到输出:

 

(3)CSV文件存储

全称 Comma-Separated Balues 即逗号分隔值或字符分割值,其文件以纯文本形式存储。
写入:

# csv test -> write
with open('file/csv/data.csv', 'w') as f:
    writer = csv.writer(f, delimiter=' ')
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['10001', 'Mike', '20'])
    writer.writerows([['10002', 'Bob', '22'], ['10003', 'Jordan', '24']])

输出:

以字典的形式写入:

# csv test -> write with dic
with open('file/csv/data.csv', 'w', newline='') as f:
    fieldnames = ['id', 'name', 'age']
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'id': '10004', 'name': 'Davie', 'age': '26'})

输出:

读取:

# csv test -> load file
with open('file/csv/data.csv', 'r' ,encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

输出:

2.数据库

(1)MongoDB存储

他是一种使用C++编写的一个非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象。
查询:
在这之前别忘了到计算机管理中把MongoDB服务打开(如果之前更改过手动的话)。

然后我们打开Robo 3T 我们这里使用以前做题库的时候的数据库,找一个关键字来查询。

# mongodb test -> read
client = pymongo.MongoClient(host='localhost', port=27017)  # connect to DB
db = client.quiz                # choose DB
collection = db.quizzes         # choose collection
result = collection.find_one({'quiz': '我国历史上第一部编年体史书是?'})   # find data
print(result)

发现可以查询出来:

比较符号:
符号        含义           示例
&lt          小于        {’age’: {‘&lt’: 20}}
&gt        大于        {’age’: {‘&gt’: 20}}
&lte      小于等于  {’age’: {‘&lte’: 20}}
&gte   大于等于    {’age’: {‘&gte’: 20}}
&ne    不等于          {’age’: {‘&ne’: 20}}
&in    在范围内        {’age’: {‘&in’: [20, 23]}}
&nin  不再范围内    {’age’: {‘&nin’: [20, 23]}}
另外,还可以进行正则匹配,例如查询名字以M开头的学生数据:
results = collection.find({’name’: {‘&regex’: ‘^M.*’}})
还有一些其他的功能符号,比如&exists 存在、&type 判断类型、&mod 模操作、&text 文本查询、&where 高级条件查询
 
插入数据:
调用collection.insert( )
可以以列表的形式插入多个值。
 
计数:
count = collection.find().count()
 
排序:
count = collection.find().sort(‘name’, pymongo.ASCENDING)     升序
count = collection.find().sort(‘name’, pymongo.DESCENDING)    降序
 
偏移:
count = collection.find().skip(2)忽略结果集的前两个元素
count = collection.find().limit(2) 只显示前两个元素
 
更新:
count = collection.update(collection ,newData)
还有updata_one() 、updata_many()方法。
 
删除:
count = collection.remove()
同样,还有remove_one() 和  remove_many()方法。
 

(2)Redis 存储

Redis是一个基于内存的高效的键值型非关系型数据库,存取效率极高,而且支持多种存储数据结构,使用也非常简单。
存取:
在这之前别忘了开启服务。

# Redis test
redis = StrictRedis(host='localhost', port=6379, db=0, password='')
redis.set('name', 'Bob')
print(redis.get('name'))

运行结果:

同时在可视化界面中我们可以看到db0中增加了该数据。
键操作:
字符串操作:
列表操作:
集合操作:
有序集合操作:
散列操作:
 
 
 
 
 
.


0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注