介绍

Python提供了多种保存数据的方式,包括文本文件(txt)、JSON文件和CSV文件。这几种是最简单的保存方式,但也很实用。

Python打开文件(保存文件的前提)

python打开文件有几种方式:

  • 内置的open函数
  • os模块的os.open函数
  • io模块的io.open函数
  • pathlib模块的Path类的open

……还有一些第三方库,这里是面向初学者的教程,不做介绍

一般使用内置的open函数就足够了

内置open()函数用法

open函数是Python的内置函数,用于打开一个文件,并返回一个文件对象。当你使用open打开文件后,你需要在完成操作后,使用file.close()方法手动关闭文件。它的基本语法如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file:必需,文件路径(字符串)或者是一个包含文件名和路径的pathlib.Path对象。
  • mode:可选,文件打开模式,默认为'r'。常见的模式有:
    • 'r':只读模式(默认)。
    • 'w':写入模式,如果文件存在则清空,不存在则创建。
    • 'a':追加模式,如果文件存在,新的内容将被写入到已有内容之后,如果文件不存在,创建新文件进行写入。
    • 'b':二进制模式。
    • '+':读写模式(可添加到其他模式中使用)。
  • buffering:设置缓冲策略。
  • encoding:文件的编码格式。
  • errors:报错级别。
  • newline:区分换行符。

一个简单的例子

# 打开file.txt文件,如果文件不存在则创建文件,如果文件存在则清空文件内容
# 以utf-8编码格式写入文件
file = open("file.txt", "w", encoding="utf-8")
# 写入内容:Hello World
file.write("Hello World")
# 关闭文件
file.close()

使用with open()

 with open:这是一种上下文管理协议(Context Management Protocol),它可以自动管理资源,无论在处理文件过程中是否发生异常,都能保证with语句执行完毕后已经关闭了打开的文件句柄。推荐使用!

with open("file.txt", "r", encoding="utf-8") as file:
    # 读取文件内容
    content = file.read()
    # 打印文件内容
    print(content)

使用文本文件(txt)保存数据

文本文件(txt):这是最简单的数据保存方式,可以保存任何字符串数据。但是,文本文件不具有结构,不适合保存复杂的数据结构,如列表或字典。

with open('file.txt', 'w') as f:
    f.write('Hello, World!')

读取数据也很简单:

# 读取数据
text = ""  # 用于存储文件中的内容
with open("file.txt", "r") as f:
    text = f.read()  # 读取文件中的所有内容
print(text)  # Hello, World!

使用JSON保存数据

JSON文件:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人们很容易地读写数据。JSON对于保存复杂的数据结构,如列表或字典,非常有用。

import json  # 导入json模块,内置模块,无需安装

# 需要保存的数据
dict = {
    "name": "张三",
    "age": 18,
}
list = [1, 2, 3, 4, 5]
with open("dict.json", "w") as f:
    # dict: 需要写入的数据
    # f: 文件对象
    # ensure_ascii=False: 不使用ASCII编码,即支持中文
    # indent=4: 缩进4个空格,美化输出
    json.dump(dict, f, ensure_ascii=False, indent=4)  # 将dict写入文

with open("list.json", "w") as f:
    json.dump(list, f)  # 将list写入文件

json.dump是Python的json模块中的一个函数,它用于将Python对象编码成JSON格式并写入到文件中。

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

 它的基本语法如下(具体访问json --- JSON 编码和解码器 — Python 3.12.3 文档):

  • obj:要编码为JSON的Python对象。
  • fp:一个.write()-supporting file-like object(支持.write()方法的类文件对象)。
  • skipkeys:默认值是False,如果dict的keys内的数据不是基本类型(str, unicode, int, long, float, bool, None),设置为False时,就会报TypeError的错误。如果设置为True,这类key-value pair会被忽略。
  • ensure_ascii:默认值是True,如果obj中含有non-ASCII的字符,那么这些字符会被如何处理。如果ensure_ascii为True,这些字符会被转义为\uXXXX的序列;如果ensure_ascii为False,这些字符会被输出。
  • check_circular:默认值是True,如果检测到循环引用(circular reference),即在待序列化的dict和list中存在相互引用的情况,那么会抛出OverflowError的错误。如果check_circular为False,这样的错误就会被忽略。
  • allow_nan:默认值是True,如果dict内含有NaN、Infinity和-Infinity,如果设置为True,它们会被序列化成相应的值;如果设置为False,会抛出ValueError的错误。
  • indent:应该是一个非负的整数或者字符串,如果是非负整数,那么JSON array元素和object成员会被美化输出,前面会增加indent个空格;如果是字符串(比如'\t'),那么元素和成员会被这个字符串缩进。
  • separators:用来指定分隔符,实际上是一个元组,第一个元素用来分隔dict中的items,第二个元素用来分隔array中的items。默认是(', ', ': '),如果想输出最紧凑的JSON字符串,可以指定为(',', ':')。
  • default:一个函数,它应该返回一个可序列化的版本的其被传入的参数,否则将抛出TypeError。
  • sort_keys:如果指定为True,那么输出的JSON字符串的key将会按照字母顺序排序后输出。

读取数据:

# 读取数据
with open("dict.json", "r") as f:
    dict = json.load(f)  # 读取文件中的数据
    print(dict)

with open("list.json", "r") as f:
    list = json.load(f)  # 读取文件中的数据
    print(list)

使用CSV储存数据

CSV文件:CSV(Comma-Separated Values)是一种常见的数据存储格式,它将每行数据分割成多个字段,通过逗号分隔。CSV文件可以被大多数的电子表格软件,如Microsoft Excel和Google Sheets,直接打开。

import csv  # 导入csv模块,内置模块,无需安装

title = ["Name", "Age"]  # 表头
data = [["John", "30"], ["Jane", "25"], ["Tom", "22"]]  # 数据
with open("data.csv", "w", newline="") as f:
    writer = csv.writer(f)  # 创建一个csv写入对象
    writer.writerow(title)  # 写入表头,witerow只能写入一行
    writer.writerows(data)  # 将data写入文件,writerows可以写入多行

读取数据:

# 读取数据
with open("data.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)  # 创建一个csv读取对象
    for row in reader:  # 逐行读取
        print(row)

使用pandas储存CSV数据

除了使用内置的csv库,还能使用第三方库:pandas

# 安装pandas模块
pip install pandas

储存数据:

# 使用pandas写入和读取csv文件
import pandas as pd  # 导入pandas模块,需要安装

data = {"Name": ["John", "Jane", "Tom"], "Age": [30, 25, 22]}  # 创建一个字典数据
data = [
    {"Name": "John", "Age": 30},
    {"Name": "Jane", "Age": 25},
    {"Name": "Tom", "Age": 22},
]  # 创建一个列表数据
# 上面两种方式都可以达到同样的效果
df = pd.DataFrame(data)  # 创建一个DataFrame对象,使用data数据

df.to_csv(
    "data.csv", index=False, encoding="utf-8"
)  # 将数据写入文件,index=False表示不写入行索引,encoding="utf-8"表示使用utf-8编码

读取数据:

# 读取数据
df = pd.read_csv("data.csv")  # 读取文件中的数据
print(df)

效果如下:

   Name  Age
0  John   30
1  Jane   25
2   Tom   22

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐