当前位置:   article > 正文

数据存储——学习笔记_writerow

writerow

一、文件存储

TXT文件存储

打开方式

模式 说明
r 以只读模式打开文件。文件的指针将会放在文件开头。这是默认模式
rb 以二进制只读方式打开文件。文件的指针会放在文件开头。
r+ 以读写方式打开文件。文件的指针将会放在文件开头。
rb+ 以二进制读写方式打开文件。文件指针将会放在文件的开头。
w 以写入的模式打开文件。如果该文件已存在,则将其覆盖。如果该文件不存在则创建新文件。
wb 以二进制写入模式打开文件。如果文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
w+ 以读写方式打开文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
wb+ 以二进制读写模式打开文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
a 以追加方式打开文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
ab 以二进制追加方式打开文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
a+ 以读写方式打开文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来读写。
ab+ 以二进制追加方式打开文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来读写。

简化写法

使用with as语法。在with控制块结束时,文件会自动关闭,所以就不需要在调用close()方法了。

with open('文件名', '模式', encoding='utf-8') as file:
	file.write()
  • 1
  • 2

JSON文件存储

对象和数组

对象:在JavaScript中是使用花括号{}包裹起来的内容。数据结构为{key1: value1, key2: value2, …}的键值对结 构。在面向对象语言中,key为对象属性,value为对应的值。

数组:在JavaScript中是方括号[ ]包裹起来的内容,数据结构为[“java”, “javascript”, “vb”, …]的索引结构。

[{
	"name": "Bob",
	"gender": "male",
	"birthday": "1992-10-18"
},{
	"name": "Selina",
	"gender": "female",
	"birthday": "1995-10-18"
}]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

由中括号包围的就是相当于列表类型,列表中的每个元素可以是任意类型,这个例子中它是字典类型,由大括号包围。

JSON可以是以上两种形式自由组合而成,可以无限次嵌套,结构清晰,是数据交换的极佳方式。

读取JSON

Python提供了JSON库来实现JSON文件的读写操作,可以调用JSON库的loads()方法将JSON文本字符串转换为JSON对象,可以通过dumps()方法将JSON对象转为文本字符串。

import json

str_ = '''
[{
	"name": "Bob",
	"gender": "male",
	"birthday": "1992-10-18"
},{
	"name": "Selina",
	"gender": "female",
	"birthday": "1995-10-18"
}]
'''

print(type(str_))
data = json.loads(str_)
print(data)
print(type(data))


'''
结果:
<class 'str'>
[{'name': 'Bob', 'gender': 'male', 'birthday': '1992-10-18'}, {'name': 'Selina', 'gender': 'female', 'birthday': '1995-10-18'}]
<class 'list'>
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

使用loads()方法将字符串转为JSON对象,由于最外层是中括号,所以最终的类型是列表类型。

可以使用索引来获取对应内容:

data[0]["name"]
data[0].get('name')

'''
Bob
Bob
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通过中括号加0索引,可以得到第一个字典元素,然后再调用其键名即可得到相应的键值。获取键值时有两种方式,一种是中括号加键名,另一种是通过get()方法传入键名,get()方法如果键名不存在则返回None

get()方法,还可以传入第二个参数:

data[0].get('age')
data[0].get('age', 25)

'''
结果:
None
25
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在原字典中该键名不存在,此时默认会返回None。如果传入第二个参数,那么在不存在的情况下返回改默认值。

注意:JSON数据需要用双引号来包围,不能使用单引号。若是一下情况则会报错:

import json

str_ = '''
[{
	'name': 'Bob',
	'gender': 'male',
	'birthday': '1992-10-18'
},{
	'name': 'Selina',
	'gender': 'female',
    'birthday': '1995-10-18'
}]
'''
data = json.loads(str_)


'''
结果:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes:
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

从JSON文本中读取内容:

从data.json文本文件中读取。其内容是刚刚定义的JSON字符串,可以先将文本文件内容读取出来,然后再使用loads()方法进行转化:

import json

with open('data.json', 'r') as file:
    str_ = file.read()
    data = json.loads(str_)
    print(data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输入JSON

调用dumps()方法将JSON对象转化为字符串格式。

将字符串,以json格式写入文本文件中:

import json

str_ = '''
[{
	"name": "Bob",
	"gender": "male",
	"birthday": "1992-10-18"
},{
	"name": "Selina",
	"gender": "female",
	"birthday": "1995-10-18"
}]
'''

with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(str_))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

另外,如果想保存JSON的格式,可以在家一个参数indent,代表缩进字符个数。示例如下:

with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(str_, indent=2))
  • 1
  • 2

另外,如果内容中包含中文,中文字符默认会变成Unicode字符,如果不想转为Unicode字符则需要使用ensure_ascii为False.

with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(str_, indent=4, ensure_ascii=False))
  • 1
  • 2

CSV文件存储

写入

列表写入
import csv

with open('data.csv', 'w', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['10001', 'Mike', '20'])
    writer.writerow(['10002', 'Bob', '22'])
    writer.writerow(['10003', 'Jordan', '21'])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

首先打开data.csv文件,模式为w(写入),获得文件句柄。

然后使用CSV的writer方法初始化写入对象。

然后调用writerow()方法,传入每行数据,列表形式。

列与列之间默认是逗号分隔,如果想修改分隔可以使用dellimiter参数

import csv

with open('data.csv', 'w', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=' ')
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['10001', 'Mike', '20'])
    writer.writerow(['10002', 'Bob', '22'])
    writer.writerow(['10003', 'Jordan', '21'])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

同时写入多行可以使用writerows()方法:

import csv

with open('data.csv', 'w', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=' ')
    writer.writerow(['id', 'name', 'age'])
    writer.writerows([['10001', 'Mike', '20'], ['10002', 'Bob', '22'], ['10003', 'Jordan', '21']])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

writerows()方法传入,一个列表,列表里面每行数据还是一个列表。

字典写入
import csv

with open('data.csv', 'w', encoding='utf-8') as csv_file:
    filednames = ['id', 'name', 'age']
    writer = csv.DictWriter(csv_file, fieldnames=filednames)
    writer
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43919
推荐阅读
相关标签
  

闽ICP备14008679号