zoukankan      html  css  js  c++  java
  • Python中的文件处理和数据存储json

    前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此。
    例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器能够显示这些内容。
    要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取。

    操作文件中的函数/方法
    在python中操作文件需要记住1个函数和3个方法

    
    

    open函数负责打开文件,并且返回文件对象
    read/write/close 三个方法都需要通过文件对象来调用

    read方法–读取文件
    open函数的第一个参数是要打开的文件名(文件名区分大小写)
    如果文件存在,返回文件操作对象, 如果文件不存在,会抛出异常
    read方法可以一次性读入并返回文件的所有内容
    close负责关闭文件
    实例【1】
    要读取文件,需要一个包含几行文本的文件。下面首先来创建一个文件,它包含精确到小数点后 30 位的圆周率值,且在小数点后每 10 位处都换行:
    pi_digits纯文本文件

    3.1415926535
    8979323846
    2643383279

    下面的程序打开并读取这个文件,再将其内容显示到屏幕上

    这里写图片描述

    文件指针标记从哪个位置开始读取数据
    第一次打开文件时,通常文件指针会指向文件的开始位置
    当执行了read方法后,文件指针会移动到读取文件的末尾


    所以下面的代码不会再读取一遍文件

    这里写图片描述

    当你将类似 pi_digits这样的简单文件名传递给函数 open()时, Python 将在当前执行的文件(即 .py 程序文件)所在的目录中查找文件。
    根据你组织文件的方式,有时可能要打开不在程序文件所属目录中的文件,要让 Python 打开不与程序文件位于同一个目录中的文件,需要提供文件路径 ,它让 Python 到系统的特定位置去查找。

    这里写图片描述

    保存数据的最简单的方式之一是将其写入到文件中。通过将输出写入文件,即便关闭包含程序输出的终端窗口,这些输出也依然存在:你可以在程序结束运行后查看这些输出,可与别人分享输出文件,还可编写程序来将这些输出读取到内存中并进行处理。
    <1>写入空文件
    要将文本写入文件,你在调用 open() 时需要提供另一个实参,告诉 Python 你要写入打开的文件
    如果需要被写入的文件已经存在的话,则会覆盖掉原先的内容

    打开文件的方式:
    name=open(‘文件名’,’访问方式’)

    这里写图片描述
    <2>附加到文件
    如果你要给文件添加内容,而不是覆盖原有的内容,可以附加模式 打开文件。你以附加模式打开文件时, Python 不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾。如果指定的文件不存在, Python 将为你创建一个空文件。

    这里写图片描述

    read方法默认会把文件的所有内容一次性读到内存,如果文件太大,对内存的占用会非常严重

    readline方法:
    readline方法可以一次性读取一行内容
    方法执行后,会把文件指针移动到下一行,准备再次读取

    读取大文件的正确方法

    使用read方法复制

    这里写图片描述
    这里写图片描述
    用readline方法来复制

    这里写图片描述

    关键字with在不需要访问文件后将其关闭,在这个程序中,
    我们调用了open(),但没有调用close();你也可以调用open()和close来打开
    和关闭文件,但这样做时,如果程序存在bug,导致close()语句没有执行,
    文件将不会关闭,未妥善地关闭文件可能会导致数据丢失或受损,
    如果在程序中过早地调用close(),
    你会发现需要使用文件时它已经关闭(无法访问),
    这会导致更多地错误,你并非在任何情况下都能轻松地确定关闭文件地恰当时机
    通过使用with结构,可让python去确定,
    你只管打开文件,并在需要时使用它,
    python会在合适的时候自动将其关闭

    这里写图片描述

    这里写图片描述

    这里写图片描述

    <1>写入空文件

    这里写图片描述
    <2>附加到文件

    这里写图片描述

    很多程序都要求用户输入某种信息,
    程序都把用户提供的信息存储在列表和字典等数据结构中,
    用户关闭程序时,你几乎总是要保存他们的信息:
    一种简单的方式是使用模块json来存储数据
    (在python中使用json的时候,主要也就是使用json模块,json是以一种良好的格式来进行数据的交互)
    模块json让你能够将简单的Python数据结构转存到文件中,
    并在程序再次运行时加载该文件中的数据,
    你还可以使用json在Python程序之间分享数据,
    更重要的是,json数据格式并非Python专用的,
    这让你能够将以json格式存储的数据与使用其他编程语言的人分享

    注意:json(javascriptObject notation)格式最初是为javascript开发的,但随后成了一种常见格式,被包括python在内的众多语言采用

    函数 json.dump() 接受两个实参:要存储的数据以及可用于存储数据的文件对象

    下面演示了如何使用 json.dump() 来存储数字列表

    我们先导入模块 json ,再创建一个数字列表。在1处,我们指定了要将该数字列表存储到其中的文件的名称。通常使用文件扩展名 .json 来指出文件存储的数据为 JSON 格式。接
    下来,我们以写入模式打开这个文件,让 json 能够将数据写入其中(见2)。在3处,我们使用函数 json.dump() 将数字列表存储到文件 numbers.json 中。

    这个程序没有输出,但我们可以打开文件 numbers.json ,看看其内容
    这里写图片描述
    下面再编写一个程序,使用 json.load() 将这个列表读取到内存中:

    在1处,我们确保读取的是前面写入的文件。这次我们以读取方式打开这个文件,因为 Python 只需读取这个文件(见2)。在3处,我们使用函数 json.load() 加载存储在
    numbers.json 中的信息,并将其存储到变量 numbers 中。

    最后,我们打印恢复的数字列表,看看它是否与 number_writer.py 中创建的数字列表相同:
    这里写图片描述

    对于用户生成的数据,使用 json 保存它们大有裨益,因为如果不以某种方式进行存储,等程序停止运行时用户的信息将丢失。
    下面来看一个这样的例子:用户首次运行程序时被提示输入自己的名字,这样再次运行程序时就记住他了

    在1处,我们提示输入用户名,并将其存储在一个变量中。接下来,我们调用 json.dump()
    ,并将用户名和一个文件对象传递给它,从而将用户名存储到文件中(见2)。雅思零基础然后,我们打印一条消息,指出我们存储了他输入的信息(见3):

    这里写图片描述

    现在再编写一个程序,向其名字被存储的用户发出问候:

    我们使用 json.load() 将存储在 username.json 中的信息读取到变量 username 中。恢复用户名后,我们就可以欢迎用户回来了

    这里写图片描述
    我们需要将这两个程序合并到一个程序中。这个程序运行时,我们将尝试从文件 username.json 中获取用户名,因此我们首先编写一个尝试恢复用户名的 try 代
    码块。如果这个文件不存在,我们就在 except 代码块中提示用户输入用户名,并将其存储在 username.json 中,以便程序再次运行时能够获取它:

    当username.json中有数据时:
    这里写图片描述
    当username.json中没有数据时:
    这里写图片描述
    再次运行
    这里写图片描述

  • 相关阅读:
    ZOJ3513_Human or Pig
    ZOJ2083_Win the Game
    ZOJ2725_Digital Deletions
    ZOJ2686_Cycle Gameu
    UVALive
    ZOJ2290_Game
    ZOJ3067_Nim
    P3159 [CQOI2012]交换棋子(费用流)
    P3153 [CQOI2009]跳舞(最大流多重匹配)
    P3121 [USACO15FEB]审查(黄金)Censoring (Gold)(ac自动机)
  • 原文地址:https://www.cnblogs.com/zhangyanran/p/9896024.html
Copyright © 2011-2022 走看看