文件操作介绍
文件的作用
一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”。 默认数据是加载到内存中,结果也是保存到内存中, 程序执行结束,所有的数据释放。
文件的打开
在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。
open(文件名,访问模式) e.g. f = open(‘test.txt’, ‘w’)
如果文件不存在那么创建,如果存在那么就先清空,然后写入数据
- 文件常用操作
"""
mode:
r: 只能读文件
w: 只能写入(清空文件内容)
a+: 读写(文件追加写入内容)
"""
#1.打开文件
f = open('hello.txt',mode='a') ##文件是自己建立在当前目录,w写,a追加
#2.文件读写操作
f.write('java\n')
#3.关闭文件(核心:打开之后必须关闭)
"""
方法一:
调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,
并且操作系统同一时间能打开的文件数量也是有限的:
"""
f.close()
- with和seek
"""
with语句:python中的with语句使用于对资源进行访问的场合,
保证不管处理过程中是否发生错误或者异常都会自动执行规定的(“清理”)操作,
释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。
seek:seek(offset, from)有2个参数: offset:偏移量 from:方向
0:表示文件开头;
1:表示当前位置;
2:表示文件末尾
1). 把位置设置为:从文件开头,偏移5个字节
2). 把位置设置为:文件最开始
3). 把位置设置为:文件最末尾
"""
with open('hello.txt','w+') as f: #w+先清空在写
f.write('hello westos\n') ##写入文件 #先清空原来的hello,写入hello westos
f.seek(0,0) ##移动指针到文件最开始
print("当前指针的位置:",f.tell())
f.seek(0,2) ##移动指针到文件末尾
print("当前指针的位置:", f.tell())
print(f.read()) ##读取文件内容
json模块
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。
这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)
- python 中str类型到JSON中转为unicode类型,None转为null,dict对应object;
pyhton中的集合不能转成json格式。
import json
#1.将python对象编码成json字符串
users = {'user1':'westos',"age":18,"city":"西安"}
json_str = json.dumps(users)
with open('doc/hello.json','w') as f:
#ensure_ascii=False 中文可以存储成功
#indent=4缩进为4个空格
json.dump(users,f,ensure_ascii=False,indent=4)
print(json_str,type(json_str))
#2.将json字符串解码成python对象
with open('doc/hello.json') as f:
python_obj = json.load(f)
print(python_obj)
原文链接:https://blog.csdn.net/weixin_45174102/article/details/113983033
以下是见解不成熟版(不想删系列)
文件基础知识
- 无论何种类型的文件,在内存或磁盘上最终都是以二进制编码存储的。根据逻辑上编码的不同,可以区分为文本文件和二进制文件。
- 文本文件基于字符编码,如ASCII码、Unicode编码等。文本文件存储的是普通字符串,能够用记事本等文本编辑器直接显示字符、进行编辑。
- 二进制文件是基于值编码的,以字节串的形式存储,其编码长度根据值的大小长度可变。通常在文件的头部相关属性中定义表示值的编码长度。二进制文件不能用文本编辑器显示或编辑,如声音、图像等文件。
文件的打开与关闭
-
打开一个文件:
-
格式:open(name[, mode [, buffering]])
-
说明:
- name是唯一必须提供的参数,即为文件名。
- mode和buffering是可选参数,在后面小节对其详细说明。
-
调用open函数之后,将得到一个文件对象。
-
假如在d盘根目录下存在一个名为’test.txt’的文件,可以通过以下语句打开它:
f = open(r'd:\test.txt')
- 如果d盘中不存在这个文件,则会提示以下错误:
-
在windows操作系统下,Python函数中文件名所包含的路径名有如下三种写法:
f = open(r'd:\test.txt')
f = open('d:\\test.txt')
f = open('d:/test.txt')
-
Python中的文件对象有三种常用属性:
- closed属性用于判断文件是否关闭,若文件处于打开状态,则返回False;
- mode属性返回文件的打开模式;
- name属性返回文件的名称。
-
在文件读写完毕之后,要注意使用f.close()方法关闭文件,以把缓存区的数据写入磁盘,释放内存资源供其他程序使用。
-
如果只提供给open函数一个参数’name’,那么将返回一个只读的文件对象。如果需要将数据写入文件中,需通过mode参数提供文件打开模式。该参数有多种选择,具体参见表:
文本文件的写入
- open()函数在’r+'、‘w’、‘w+’、 'a’和’a+'等模式下打开文件后,可返回一个文本文件对象,在此基础上可以往文本文件写入数据。文件对象内置读写数据的方法write()、writelines()
- 打开d盘的test.txt文件可以发现其中有两行文本:123和abc。另外,需注意的是,一旦在’w’模式下打开某个已经存在的文件,则该文件里的原有数据会被清空。
- 在上一个例子生成的test.txt基础上,如果继续运行如下代码:
- 此时,打开d盘的test.txt文件可以发现其中有2行字符:567和def,之前的内容已被清除。
- 除了write()方法外,writelines()可实现逐行写入给定列表中的所有字符串元素
- 打开test.txt文件可以发现有4行文本:567,def,123和abc。
文本文件的读取
-
open()函数在’r’、‘r+’、'w+'和’a+'等模式打开文件后,可返回一个文本文件对象,在此基础上实现对文本文件的读取。文件对象内置读取数据的方法有read()、readline()、readlines(),如图所示:
-
在d盘根目录下新建一个名为’test.txt’的文件,并在其中输入两行英文’hello Python!‘和’how are you!’,然后保存并关闭文件。
-
在‘r’模式下构建文件对象f之后,可以用其内置函数read()、readline()和readlines()等方法读取出f中的数据。利用read()方法可读取文件中指定长度的字符,若括号中无数字,则直接读取文件中所有的字符;若提供数字,则一次读取指定数量的字符。
-
文件对象的内置方法readline()可实现逐行读取字符,若括号中无数字,则默认读取一行;若括号中有数字,则读取这一行中对应数量的字符(如果该数字大于这一行剩余的字符数,则读取这一行剩余的所有字符)。
-
文件对象的内置方法f.readlines()可实现读取一个文件中的所有行,并将其作为一个列表返回。每一行的信息作为列表中的一个字符串元素。
-
调用readlines()方法将返回一个以文件每一行内容作为元素的列表存储在内存之中。当文件很大时,则需要占用较大的内存,影响到计算机的正常运行。此时,有三种方法可以替代readlines()以减少内存的占用:
(1)组合使用循环结构与readline()方法,逐行读取文本内容;
(2)利用iter(文件对象)返回一个迭代器,从而降低了对计算机内存的占用;
(3)利用文件对象迭代功能,逐行读取信息。
-
最后,如果需要将迭代器转化为列表,则可考虑以下方法: