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中没有数据时:
再次运行
Python中的文件处理和数据存储json的更多相关文章
- Django中从本地上传excel文件并将数据存储到数据库
Django中从本地上传excel文件并将数据存储到数据库 一.前端界面 <div class="page-container"> <form action=&q ...
- python学习之【第十一篇】:Python中的文件操作
1.前言 在Python中,对文件的操作主要遵循以下流程: 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 2.打开文件 使用open函数,可以打开一个已经存在的文件,或 ...
- 【python系统学习17】python中的文件读写
python中的文件读写 文件读写,是Python代码调用电脑文件的主要功能,能被用于读取和写入文本.音频片段.Excel文档.邮件以及任何保存在电脑上的东西. 可使用python批量的操作本地文件, ...
- 重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作
原文:重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 [源码下载 ...
- python中 对文件的读写操作 以及如何边写入 边保存flush()
转自:https://blog.csdn.net/t8116189520/article/details/78854708 首先 python中打开文件大致常用的几类如下: 1.写入文件write # ...
- Python中的文件和目录操作实现
Python中的文件和目录操作实现 对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这 ...
- 【Python】解析Python中的文件操作
目录结构: contents structure [-] 简介 Python中的文件类型 内置函数的文件操作 open()函数 Mode 创建文本文件 读取文本文件 循环文件对象 关闭文件 With语 ...
- Python中elasticsearch插入和更新数据的实现方法
Python中elasticsearch插入和更新数据的实现方法 这篇文章主要介绍了Python中elasticsearch插入和更新数据的实现方法,需要的朋友可以参考下 首先,我的索引结构是酱紫的. ...
- 字符编码和python中的文件处理
字符编码与python文件处理 ---------------- 字符编码 1.常见的编码 ASCII: 美国人发明的,只编码英文字母和符号,1个字节. GB2312: 中国人发明的,增加了中文汉字和 ...
随机推荐
- 卷积的等变性(equivariant) / 不变性(invariant)
不变性:输入x发生变换,但是F之后的输出不变 \(F(x)=F [\)transform\((x)]\) 池化:近似不变性,当图像发生微小变化,最大池化的输出不变,还是一个池化范围内的max 等变性: ...
- 【LeetCode】81. 搜索旋转排序数组 II
81. 搜索旋转排序数组 II 知识点:数组,二分查找: 题目描述 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 ...
- 用AutoHotkey的热字串功能启动常用电脑程序软件 Version 2 Build 20191214
; 用AutoHotkey的热字串功能启动常用电脑程序软件 Version 2 Build 20191214 ; 电脑上的快捷键太多了,记都记不住,容易冲突和搞混,所以做了个热字串启动; 用法:运行此 ...
- Spring源码解析之BeanFactoryPostProcessor(三)
在上一章中笔者介绍了refresh()的<1>处是如何获取beanFactory对象,下面我们要来学习refresh()方法的<2>处是如何调用invokeBeanFactor ...
- 对象转换工具 MapStruct 介绍
前言 在我们日常开发的分层结构的应用程序中,为了各层之间互相解耦,一般都会定义不同的对象用来在不同层之间传递数据,因此,就有了各种 XXXDTO.XXXVO.XXXBO 等基于数据库对象派生出来的对象 ...
- PTA数据结构习题集
https://blog.csdn.net/qq_43733499/category_8956159.html https://www.cnblogs.com/nonlinearthink/tag/% ...
- Prometheus alertmanager邮件发送+grafana告警展示
前言 前面一篇博客,我已经介绍了prometheus如何监控mysql. 这一篇我来介绍如何通过alertmanger进行告警邮件发送(微信或钉钉类似,因为需要企业帐户,我就不试了),以及如何通过gr ...
- netty系列之:netty中的懒人编码解码器
目录 简介 netty中的内置编码器 使用codec要注意的问题 netty内置的基本codec base64 bytes compression json marshalling protobuf ...
- 说说XXE漏洞那些事
想不起来写点啥了,又是摸鱼的一天,看了一些红队大佬们整理的资料,非常精彩,于是一个咸鱼翻身先选了一些简单的小点来写一写个人的感想(后续会继续更新其他内容) 不能说写的是技术分享,因为师傅们的文章珠玉在 ...
- centos7.5 安装jdk环境
最新下载地址 历史下载地址 [root@manage ~]# mkdir /application/ [root@manage ~]# tar -xf jdk-8u112-linux-x64.gz - ...