首页Python8.数据存储——txt/j...

8.数据存储——txt/json/csv文件存储

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]]
RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments