Python数据存储指南:使用文本文件(txt)、JSON 和 CSV 格式保存数据

介绍

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

    作者:“猿”谋人

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python数据存储指南:使用文本文件(txt)、JSON 和 CSV 格式保存数据

    发表回复