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中没有数据时:
这里写图片描述
再次运行
这里写图片描述

原文地址:https://www.cnblogs.com/zhangyanran/p/9896024.html