1.TXT文件存储:
利用Python提供的open()
方法打开文本文件,创建一个文件操作对象。利用文件操作对象的write()
方法将数据写入文件。
Tips:
推荐使用with as
语法,这样当with
控制块结束时,文件会自动关闭,而不需要再调用close()
方法。
data = [{
"id":"01",
"name":"Tom",
"age":"11"
},{
"id":"02",
"name":"Bob",
"age":"22"
},{
"id":"03",
"name":"Jack",
"age":"33"
}]
with open('data.txt' , 'w' , encoding='utf-8') as file:
for d in data:
file.write(f'id:{d["id"]};')
file.write(f'name:{d["name"]};')
file.write(f'age:{d["age"]}\n')
运行成功后,会在本地生成名为data.txt
的文本文件,内容如下:
id:01;name:Tom;age:11
id:02;name:Bob;age:22
id:03;name:Jack;age:33
2.JSON文件存储:
JSON(JavaScript Object Notation)即JavaScript对象标记,其通过对象和数组的组合来表示数据,构造简单并且结构化程度很高,是一种轻量级的数据交换格式。
Python中提供了JSON
库来实现对json文件的读写操作。
2.1 读取json
- 读取json文本字符串:
调用JSON
库中的loads()
方法,可以将json文本字符串转化为json对象。
Tips:
json文本字符串中的数据需要使用双引号""
包括起来,而不能使用''
,否则会报错。
data = '''
[{
"id":"01",
"name":"Tom",
"age":"11"
},{
"id":"02",
"name":"Bob",
"age":"22"
},{
"id":"03",
"name":"Jack",
"age":"33"
}]
'''
import json
json = json.loads(data)
print(type(json))
print(json)
运行结果如下:
<class 'list'>
[{'id': '01', 'name': 'Tom', 'age': '11'}, {'id': '02', 'name': 'Bob', 'age': '22'}, {'id': '03', 'name': 'Jack', 'age': '33'}]
- 读取json文件:
读取json文件,需要首先读取文本文件的内容,然后再调用JSON
库中的loads()
方法,将json文本字符串转化为json对象。
import json
with open('data.json' , encoding='utf-8') as file:
str = file.read()
json = json.loads(str)
print(type(json))
print(json)
运行结果如下:
<class 'list'>
[{'id': '01', 'name': 'Tom', 'age': '11'}, {'id': '02', 'name': 'Bob', 'age': '22'}, {'id': '03', 'name': 'Jack', 'age': '33'}]
另外,可以使用load()
方法,直接读取文本文件。
首先利用Python提供的open()
方法打开文本文件,创建一个文件操作对象;然后将该对象传递给load()
方法。
import json
json = json.load(open('data.json' , encoding='utf-8'))
print(json)
运行结果如下:
[{'id': '01', 'name': 'Tom', 'age': '11'}, {'id': '02', 'name': 'Bob', 'age': '22'}, {'id': '03', 'name': 'Jack', 'age': '33'}]
Tips:load()
方法是将整个文本文件中的内容转化为了json对象,而loads()
方法可以更灵活地控制转化内容。
2.2 保存为json
调用JSON
库中的dumps()
方法,可以将json对象转化为json文本字符串。
data = [{
"id":"01",
"name":"Tom",
"age":"11"
},{
"id":"02",
"name":"Bob",
"age":"22"
},{
"id":"03",
"name":"Jack",
"age":"33"
}]
import json
with open('data.json' , 'w' , encoding='utf-8') as file:
file.write(json.dumps(data))
运行成功后,会在本地生成名为data.json
的文本文件,内容如下:
[{"id": "01", "name": "Tom", "age": "11"}, {"id": "02", "name": "Bob", "age": "22"}, {"id": "03", "name": "Jack", "age": "33"}]
与load()
、loads()
方法一样,也可以调用dump()
方法,将全部数据写入json文本文件中。
data = [{
"id":"01",
"name":"Tom",
"age":"11"
},{
"id":"02",
"name":"Bob",
"age":"22"
},{
"id":"03",
"name":"Jack",
"age":"33"
}]
import json
json.dump(data , open('data.json' , 'w' , encoding='utf-8'))
可以看到,上面方法保存的json文件为一整行,没有缩进格式。
如若,需要保存json对象的缩进格式,可以使用indent
参数来控制缩进字符的个数。
由此得到的json文件自带缩进,格式清晰。
data = [{
"id":"01",
"name":"Tom",
"age":"11"
},{
"id":"02",
"name":"Bob",
"age":"22"
},{
"id":"03",
"name":"Jack",
"age":"33"
}]
import json
with open('data.json' , 'w' , encoding='utf-8') as file:
file.write(json.dumps(data , indent=4))
运行结果如下:
[
{
"id": "01",
"name": "Tom",
"age": "11"
},
{
"id": "02",
"name": "Bob",
"age": "22"
},
{
"id": "03",
"name": "Jack",
"age": "33"
}
]
如果,有中文内容,需要将参数ensure_ascii
值设置为False
,否则中文字符会存储为Unicode
字符。
data = [{
"id":"01",
"name":"小明",
"age":"11"
},{
"id":"02",
"name":"小刚",
"age":"22"
},{
"id":"03",
"name":"小红",
"age":"33"
}]
import json
with open('data.json' , 'w' , encoding='utf-8') as file:
file.write(json.dumps(data , indent=4 , ensure_ascii=False))
运行结果如下:
[
{
"id": "01",
"name": "小明",
"age": "11"
},
{
"id": "02",
"name": "小刚",
"age": "22"
},
{
"id": "03",
"name": "小红",
"age": "33"
}
]
3.CSV文件存储:
CSV(Comma-Separated Values)是一种以特定字符作为分隔符(常见分隔符为逗号或者制表符)的纯文本,结构简单清晰。
3.1 写入csv文件
- 使用
csv
库写入
调用csv
库中的writerow()
方法依次写入每行数据。
首先调用csv
库中的writer()
方法初始化一个写入对象,然后调用writerow()
方法依次写入每行数据。
import csv
with open('data.csv' , 'w' , encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['id','name','age'])
writer.writerow(['01', '小明', '11'])
writer.writerow(['02', '小刚', '22'])
writer.writerow(['03', '小红', '33'])
运行成功后,会在本地生成名为data.csv
的文本文件,内容如下:
id,name,age
01,小明,11
02,小刚,22
03,小红,33
写入的csv文件默认以逗号分隔,如若修改分隔符,可以设定delimiter
参数。
import csv
with open('data.csv' , 'w' , encoding='utf-8') as file:
# 设定分隔符为;分号
writer = csv.writer(file , delimiter=';')
writer.writerow(['id','name','age'])
writer.writerow(['01', '小明', '11'])
writer.writerow(['02', '小刚', '22'])
writer.writerow(['03', '小红', '33'])
运行成功后,会在本地生成名为data.csv
的文本文件,内容如下:
id;name;age
01;小明;11
02;小刚;22
03;小红;33
调用writerows()
方法,可以同时写入多行数据,此时传入的参数应为二维列表。
import csv
with open('data.csv' , 'w' , encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['id','name','age'])
writer.writerows([['01', '小明', '11'],['02', '小刚', '22'],['03', '小红', '33']])
运行成功后,会在本地生成名为data.csv
的文本文件,内容如下:
id,name,age
01,小明,11
02,小刚,22
03,小红,33
csv
库也提供了字典数据的写入方式。
首先调用DictWriter()
方法初始化一个字典写入对象,然后调用writeheader()
方法写入头信息,最后调用writerow()
方法写入字典数据。
import csv
with open('data.csv' , 'w' , encoding='utf-8') as file:
fieldname = ['id','name','age']
writer = csv.DictWriter(file , fieldnames=fieldname)
writer.writeheader()
writer.writerow({"id":"01","name":"小明","age":"11"})
writer.writerow({"id":"02","name": "小刚","age": "22"})
writer.writerow({"id":"03","name": "小红","age": "3"})
运行成功后,会在本地生成名为data.csv
的文本文件,内容如下:
id,name,age
01,小明,11
02,小刚,22
03,小红,3
- 使用
pandas
库写入
data = [{
"id":"01",
"name":"小明",
"age":"11"
},{
"id":"02",
"name":"小刚",
"age":"22"
},{
"id":"03",
"name":"小红",
"age":"33"
}]
import pandas as pd
df = pd.DataFrame(data)
df.to_csv('data.csv' , index=False)
运行成功后,会在本地生成名为data.csv
的文本文件,内容如下:
id,name,age
01,小明,11
02,小刚,22
03,小红,33
3.2 读取csv文件
- 使用
csv
库读取
通过csv
库中的reader()
方法读取文件,然后通过遍历输出文件中每行内容。
import csv
with open('data.csv' , 'r' , encoding='utf-8') as file:
reader = csv.reader(file)
print(reader)
for row in reader:
print(row)
运行结果如下:
<_csv.reader object at 0x000001DF59B5DE80>
['id', 'name', 'age']
['1', '小明', '11']
['2', '小刚', '22']
['3', '小红', '33']
- 使用
pandas
库读取
import pandas as pd
df = pd.read_csv('data.csv',encoding='utf-8')
print(df)
print('-------')
# 将DataFrame对象转化为列表
data = df.values.tolist()
print(data)
运行结果如下:
id name age
0 1 小明 11
1 2 小刚 22
2 3 小红 33
-------
[[1, '小明', 11], [2, '小刚', 22], [3, '小红', 33]]