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: 中国人发明的,增加了中文汉字和 ...
随机推荐
- Gitea 1.4.0 目录穿越导致命令执行漏洞
复现 POST /vulhub/repo.git/info/lfs/objects HTTP/1.1 Host: 192.168.49.2:3000 Accept-Encoding: gzip, de ...
- Matlab的datenum()函数用法
Matlab的datenum()函数用法 将日期和时间转换为日期序列值 datenum 函数创建一个数值数组,将每个时间点表示为从 0000 年 1 月 0 日起的天数.数值还能表示以天为单位的过去时 ...
- 【干货】WordPress系统级更新,程序升级
[干货]WordPress系统级更新,程序升级 网站技术日新月异,更新升级是维护工作之一,长时间不升级的程序,就如长时间不维护的建筑物一样,会加速老化.功能逐渐缺失直至无法使用.在使用WordPres ...
- JavaScript关于返回数据类型一个小小的笔记
Javascript关于返回数据类型的一个小笔记 javascript数据类型有两种. 一种是基本数据类型:String.Number.Boolean.Symbol.Underfine.Null 一种 ...
- 多次面试被拒,‘宅家苦修’30天,终获美团offer(含字节跳动/阿里/腾讯等大厂面试题整理)
背景:双非渣本. 今年由于疫情,上半年一直在家里.2月份本来无忧无虑,呆在家里不给国家添乱的时候,发现身边的同学找到了大厂的offer.心里开始有点慌张.本来想在3月份如果能回到学校,就开始考研之路, ...
- 记一次 .NET 某WMS仓储打单系统 内存暴涨分析
一:背景 1. 讲故事 七月中旬有一位朋友加wx求助,他的程序在生产上跑着跑着内存就飙起来了,貌似没有回头的趋势,询问如何解决,截图如下: 和这位朋友聊下来,感觉像是自己在小县城当了个小老板,规律的生 ...
- Cloud-init的安装和使用 --以ubuntu-server-14.04-amd64为例
by hyc 1.Cloud-init安装 已有了一个安装好系统的镜像. 镜像名:ubuntu-test-14.04-server-amd64.img 用户名:user 密码:1 主机名:ubuntu ...
- 定制bash命令提示符
使用shell时经常要知道当前路径,如果将它写在提示符里很节省很多敲pwd的动作,方法是在启动文件(.bash_profile, .bashrc)里加上: export PS1="[\u@\ ...
- 【动画消消乐|CSS】086.炫酷水波浪Loading过渡动画
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...
- Java工具包之-Guava
https://blog.csdn.net/zmx729618/article/details/78540026 https://my.oschina.net/realfighter/blog/349 ...