数据储存
数据储存的格式有很多,最简单的文本格式有TXT,JSON,CSV等。还可以保存到数据库中,如关系型数据库MySQL,非关系型数据库MongoDB, Redis等。
文件储存
文件储存其实就是选择储存的格式,如文本型数据有TXT等。
TXT文本储存
TXT格式的使用十分简单,之前也大量使用过了,这里就表示一下。
with open(filename,method,code) as f:
f.write()
f.read()
这是两个最基本的操作,这里使用with方法打开图片是一种最
安全
的方法,因为这样不用单独关闭文件对象,也不会让文件对象一直占用内存。
json文件储存
JSON 全称JavaScript Object Notation,也是JavaScript对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度 非常高,是一种轻量级的数据交换格式。
- 对象和数组
- 对象:
它在 JavaScript 中是使用花括号{ }包裹起来的内容,数据结构为{ keyl va luel, key2:
value2 }的键值对结构 在面向对象的语言中, key 为对象的属性, value 为对应的键名可以使用整数 字符串来表示 值的类型可以是任意类型 - 数组:
数组在 JavaScript 是方括号[]包裹起来的内容,数据结构为[ “java”, “javascript”,
"vb”,.. ]的索引结 。在 JavaScript 中, 数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引用得多 同样,值的类型可以是任意类型。
- 对象:
[{ ”name ":“Bob”, “gender”:”male",
’'birthday””1992-10-18”
},{ ”name" : "Selina ”,
"gender":”female ”,
"birthday":”1995-10-18"
}]
由中括号包围的就相当于列表类型,列表中的每个元素可以是任意类型,这个示例中它是字典类
型,由大括号包围。
- 读取JSON
python为我们提供了简单易用的JSON库来实现JSON文件的读取。可以调用
loads()
和dumps()
方法来实现文本和JSON对象的转换
import json
str = '''
[{
"name":"bob",
"gneder":"male",
"bir":""1018"
},{
"name":"selina",
"gender":"femal",
"bir":"1018"
}]
'''
print(type(str))
data = json.loads(str)
print(data)
print(type(data))
所以json可以实现str到对象的转换的,所以之前说json是一种轻量级的数据交换格式,对象标记。
因为它是一种对象标记,以对象为对象储存。
注意:JSON中的数据需要用双引号来包围,用单引号的话
loads()
会解析错误。
- 输出JSON
同样的,dumps()
方法的作用基本和laods()
相反。
dumps(json_data,indent, ensure_ascii)
其中json_data是需要转换的json的某一对象的数据,indent
是转换成的str的缩进字符数,可以让格式更加美观。ensure_ascii是是个bool型参数,用于指定json中的内容是否全是ascii编码。
注意:
- 这里的json_data中的数据是可以用单引号来包围的;
- 如果json_data中包含中文数据,直接输出会输出中文的unicode字符,这时需要指定ensure_ascii为False。
然后如果要储存在txt文件中,需要再以utf-8
的encoding方式open文件。
CSV文件储存
全称Comma-Separated Values ,中文名交逗号分割值或者字符分割值,文件以纯文本形式储存表格数据
CSV的结构:
CSV文件内容就是一个字符序列,包含了任意多的记录
,记录之间有某种换行符分割。
每条记录由多个字段
组成,字段之间的分隔符为其他字符或字符串,常见的是逗号和制表符。
每条记录都有完全相同的字段序列(格式、类型),相当于一个结构化的纯文本形式
,甚至比Excel更简洁。
- 写入
import csv
with open('data.csv','w') as csvfile:
writer = csv.writer(csvfile, delimiter=',')
writer.writerow(['id','name','age'])
writer.writerow(['10001','Mike',20])
writer.writerow(['10002','Bob',22])
writer.writerow(['10003','Jordan',21])
# 这里写入的方式就和txt文件的不一样了,这里获取到csv文件句柄后,还要通过csv.writer()方法初始化写入对象,
# 传入句柄后,调用写入对象的writerow()方法传入每行的数据即可完成写入。
# delimiter参数用于指定列与列之间的分割符。
上述代码也可以直接用writer.writerows()
方法一次写入多行。
上面的代码是通过列表字段写入数据的,也可以通过字典格式写入数据,但是写入方式又变得不一样了。
import csv
with open('data.csv', 'w') as csvfile:
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(csvfile,fieldnames=fieldnames)
writer.writerow({'id':'10001','name':'Mike','age':20})
writer.writerow({'id':'10002','name':'Mike','age':20})
这里需要先定义一个三个字段,后面通过字典加入记录时需要根据这三个字段来选取字典中的内容。
- 如果需要追加文件内容,则以
'a'
方式获取文件句柄即可。 - 如果写入内容里有中文,则在通过
open()
获取句柄时,需要指定编码格式为encoding=utf-8
注意:
通过列表的方式写入内容的时候需要严格按照第一个记录(也就是表格表头顺序)书写,但是按照字典的形式书写则不需要考虑顺序,会自动对应上。
字典方式写入时,记录中的字段键值必须要在fieldnames中,可以缺少对应的fieldname,但不能超出fieldnames。
- 读取
直接上代码
import csv
with open('data.csv','r',encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
关系型数据库储存
pass
非关系型数据库储存
pass