Python 入门 —— Python 文件操作与通过 josn 进行数据存储

标签: python文件管理  json

Python 文件操作与josn–数据存储

1 文件操作

  • 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
  • 操作文件的函数/方法
    在python中要操作文件需要记住一个函数和三个方法
    python中一切皆对象
    open :打开文件,并且返回文件操作对象
    read :将文件内容读取到内存
    write:将指定的内容写入到文件
    close:关闭文件
    open 函数负责打开文件,并且返回文件对象
    read/wirte/close三个方法都需要通过文件对象调用
  • read方法–读取文件
    open的第一个参数是要打开的文件明(文件名区分大小写)
    如果文件存在,返回文件操作对象
    如果文件不存在,会抛出异常
    read方法可以一次性读入并返回文件的所有内容
    close方法负责关闭文件

编辑TEST文件:
内容:

I’m used for test.

通过python进行打开

1.1 文件的读取

 # 1. 打开文件
 open方法:负责打开文件
 执行如下:
 f = open('TEXT')     
 # TEXT 文件与本 .py python源文件在同一目录下,故不需要添加绝对路径 
 # 2.读取文件
 # read方法:负责读取文件,
 # 可一次性读入并返回文件的所有内容
 f.read()
 test = f.read()
 print = test
 # 3.关闭文件
 # close方法:负责关闭文件
 f.close()

 # 在开发中,通常会先编写打开和关闭的代码

执行如下:
这里写图片描述
控制台显示如下:这里写图片描述
显示了文件的内容

1.2 文件指针:

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

示例:

 f = open('TEXT')    # 打开文件

 text = f.read()     # 定义 text 为读取文件
 print text          # 显示 text 结果
 print type(text)    # 显示类型
 print len(text)     # 显示 text 长度

 print '#' * 50

 text = f.read()     # 再次定义 text
 print text          # 查看文件内容
 print len(text)
 f.close()

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述
后面显示为 0 是因为,文件指针,在调用文件内容后,直接指到了文件最后,因此不会显示任何内容,当然没有长读可言

1.3 写文件

  • 执行方式
    file = open(‘filename’,’action’)
    常用的方法有’w’,’a’
    其中’w’为覆盖,’a’为追加

1.4 覆盖

  • 以’w’方式打开文进阿
    如果该文件存在,原文件内容会被覆盖
    如果文件不存在,创建文件并写入

示例:

 file = open('TEST','w')   # 以写的方式打开文件
 test = file.write('HELLO') 
 file.close()             # 关闭文件
 file = open('TEST')
 print file.read()        # 显示文件,查看文件内容
 file.close()             # 关闭文件

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述

1.5 追加

  • 以追加方式打开文件
    如果该文件存在,文件指针会放在文件的末尾
    如果文件不存在,创建文件并写入

示例:

 f = open('TEST')

 f = open('TEST')
 print f.read()

 f.close()

 f = open('TEST', 'a')

 f.write('python')  # 追加到文件内容的后面
 # 若想换行追加可在要追加内容前加上 \n 换行符号
 f.close()
 f = open('TEST')
 print f.read()

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述

1.6 文件的逐行读取

若是文件内容过大直接将文件的全部内显示到控制台,此时需要逐行对文件内容进行显示

示例:
 文件TEXT的内容为
 HELLOpython
 python


 通过python进行查看

 import time           # 调用 time 函数
 test = open('/etc/passwd')


 while True:              
     text = test.readline()
     print text,         # ',' 表示取消换行
     time.sleep(1)       # time.sleep(1) 表示每隔 1 秒显示一次
     if not text:
         break

 test.close()

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述
在一行一行的进行显示

1.7 文件的复制

1.7.1 全部复制

示例

 # 1.打开文件
 # 源文件以只读的方式打开
 file_read = open('TEST')
 # 目标文件以写的方式打开
 file_write = open('TEST_COPY','w')

 # 从源文件中读取内容
 text = file_read.read()
 # 将读取到的内容写到目标文件中
 fiel_write.write(text)
 # 关闭文件
 file_read.close()
 file_write.close()

执行如下:
这里写图片描述
复制成功后,将会出现文件TESST_COPY
这里写图片描述
其内容,与TEST内容相同
这里写图片描述

1.7.2 逐行复制

对文本内容进行逐行复制

示例:

test = open('/etc/passwd')
test_write = open('passwd_copy', 'w')


while True:
    text = test.readline()   # 逐行对要复制的文件进行读取

    if not text:             # 如果文件指针指到最后,则退出循环
        break
    test_write.write(text)   # 将text的内容写入新文件

test_write.close()

test.close()

执行如下:
这里写图片描述
复制的新文件的内容如下:
这里写图片描述

1.8 文件打开的第二种方式:with

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

以 TEST文件为例:
TEST文件内容如下:
这里写图片描述

示例:

 # 通过with的方式进行文件的打开
 with open('TEST') as file_object:
     # 调用read方法进行文件内容的查看
     contents = file_object.read()
     print contents

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述

逐行对文件进行读取

 filename = 'TEST'
 with open(filename) as file_object:
     # 通过for语句,逐行对文件进行读取
     for line in file_object: 
         print line

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述

对文件进行写入

 # 将文件名用变量进行表示,文件若不存在,执行程序后
 # 会自动新建文件,并执行操作
 filename = 'python'
 # 以写的方式进行文件的打开
 with open(filename, 'w') as file_object:
     # 写入如下内容,添加换行符,进行换行添加
     file_object.write('I love study.\n')
     file_object.write('I love python.')
     # 以默认读的方式进行打开
 with open(filename) as file_object:
     # 在控制台显示文件内容
     print file_object.read()

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述

对文件内容进行添加

 # 将文件名用变量进行表示
 filename = 'python'
 # 以添加的方式进行文件的打开
 with open(filename, 'a') as file_object:
     # 添加如下内容,添加换行符,进行换行添加
     file_object.write('I love study.\n')
     file_object.write('I love python.')
     # 以默认读的方式进行打开
 with open(filename) as file_object:
     # 在控制台显示文件内容
     print file_object.read()

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述

对文件内容进行复制

 # 将文件名用变量进行表示
 filename = 'python'
 f = 'python_copy'
 # 以读的方式打开要进行复制的文件
 with open(filename) as file_obj:
     test = file_obj.read()
 # 以写的方式打开府之后的文件
 with open(f, 'w') as file_object:
     # 将要进行复制的文件的内容,添加到新的文件中
     file_object.write(test) 

     # 以默认读的方式进行打开
 with open(f) as file_object:
     # 在控制台显示复制后的文件的内容
     print file_object.read()

执行如下:
这里写图片描述
控制台显示如下:与上面的python的文件内容完全相同
这里写图片描述

2 josn–数据存储

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

通过 json 进行数据的存储与调用

通过 json.dump 方法将数据导入文件中

 import json   # 调用 json 模块
 number = [1,2,3,4]  # 定义列表

 with open('numbers.json','w') as f_obj:
     # 我们使用函数json.dump()将数字列表存储到文件中
     json.dump(number,f_obj)

执行如下:
这里写图片描述
产生的存储文件的内容如下:
这里写图片描述
* .json 中存储的数据一般是数据结构,在python 中就是,列表,字典等*

通过 json.load 方法加载存储在 .json 中的信息

示例:

 import json
 filename = 'numbers.json'
 with open(filename) as f_obj:
     # 我们使用函数json.load加载存储在numbers.json中的信息
     # 并将其存储到变量numbers中
     numbers = json.load(f_obj)
 print numbers

执行如下:
这里写图片描述
控制台显示如下:
这里写图片描述

json 应用示例

  • 如果以前存储了用户,就显示,否则,就提示用户输入用户名并存储它

代码如下:

 import json
 filename = "username.json"
 try:
     with open(filename) as f_obj:
         username = json.load(f_obj)
 except ValueError:
     username = raw_input("What is you name? ")
     with open(filename,"w") as f_obj:
         json.dump(username,f_obj)
         print "We'll remember you when you come back %s" % username
 #依赖于try代码块成功执行的代码都应放到else代码块中:
 else:
     print "Welcome back %s " % username

执行如下:
这里写图片描述
控制台显示如下:
若是没有用户
这里写图片描述
若是有用户
这里写图片描述

版权声明:本文为Buster_ZR原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Buster_ZR/article/details/81194105

智能推荐

【Sublime】使用 Sublime 工具时运行python文件

使用 Sublime 工具时报Decode error - output not utf-8解决办法   在菜单中tools中第四项编译系统 内最后一项增添新的编译系统 自动新建 Python.sublime-build文件,并添加"encoding":"cp936"这一行,保存即可 使用python2 则注释encoding改为utf-8 ctr...

java乐观锁和悲观锁最底层的实现

1. CAS实现的乐观锁 CAS(Compare And Swap 比较并且替换)是乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现就是基于 CAS 的,也可以理解为自旋锁 JUC是指import java.util.concurrent下面的包, 比如:import java.util.concurrent.atomic.AtomicInteger; 最终实现是汇编指令:lock...

Python 中各种imread函数的区别与联系

  原博客:https://blog.csdn.net/renelian1572/article/details/78761278 最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该 read the fuc...

用栈判断一个字符串是否平衡

注: (1)本文定义:左符号:‘(’、‘[’、‘{’…… 右符号:‘)’、‘]’、‘}’……. (2)所谓的字符串的符号平衡,是指字符串中的左符号与右符号对应且相等,如字符串中的如‘(&r...

JAVA环境变量配置

位置 计算机->属性->高级系统设置->环境变量 方式一 用户变量新建path 系统变量新建classpath 方式二 系统变量 新建JAVA_HOME,值为JDK路径 编辑path,前加 方式三 用户变量新建JAVA_HOME 此路径含lib、bin、jre等文件夹。后运行tomcat,eclipse等需此变量,故最好设。 用户变量编辑Path,前加 系统可在任何路径识别jav...

猜你喜欢

常用的伪类选择器

CSS选择器众多 CSS选择器及权重计算 最常用的莫过于类选择器,其它的相对用的就不会那么多了,当然属性选择器和为类选择器用的也会比较多,这里我们就常用的伪类选择器来讲一讲。 什么是伪类选择器? CSS伪类是用来添加一些选择器的特殊效果。 常用的为类选择器 状态伪类 我们中最常见的为类选择器就是a标签(链接)上的为类选择器。 当我们使用它们的时候,需要遵循一定的顺序问题,否则将可能出现bug 注意...

ButterKnife的使用介绍及原理探究(六)

前面分析了ButterKnife的源码,了解其实现原理,那么就将原理运用于实践吧。 github地址:       点击打开链接 一、自定义注解 这里为了便于理解,只提供BindView注解。 二、添加注解处理器 添加ViewInjectProcessor注解处理器,看代码, 这里分别实现了init、getSupportedAnnotationTypes、g...

1.写一个程序,提示输入两个字符串,然后进行比较,输出较小的字符串。考试复习题库1|要求:只能使用单字符比较操作。

1.写一个程序,提示输入两个字符串,然后进行比较,输出较小的字符串。 要求只能使用单字符比较操作。 参考代码: 实验结果截图:...

小demo:slideDown()实现二级菜单栏下拉效果

效果如下,鼠标经过显示隐藏的二级菜单栏 但是这样的时候会存在一个问题,就是鼠标快速不停移入移出会导致二级菜单栏闪屏现象,一般需要使用stop()来清除事件  ...

基于docker环境的mysql主从复制

1、安装docker 可以参考之前的博客,之前写过了~ 2、拉取mysql镜像 3、创建mysql01和mysql02实例 主: 从: 4、进入容器修改配置 1)修改主数据库配置 进入主数据库容器 切换到 etc/mysql/目录下 查看可以看到my.cnf文件,使用vim编辑器打开,但是需要提前安装 安装vim命令: 安装成功后,修改my.cnf文件 新增配置后的my.cnf: binlog 日...