Python简单文件存取

文件的概念

文件是计算机中由操作系统管理的具有名字的存储区域。

Python中的文件对象

文件对象是处理文件常用的并且全能的工具。这个主要内置对象类型提供了一种可以存取Python程序内部文件的方法。

简而言之,内置open函数会创建一个Python文件对象,可以作为计算机上的一个文件链接。在调用open之后,你可以通过调用返回文件对象的方法来读写相关外部文件。

与我们目前见过的类型相比,文件对象多少有些不寻常。它们不是数字、序列也不是对应。相反,文件对象只是常见文件处理任务输出模块。多数文件方法都与执行外部文件相关的文件对象的输入和输出有关,但其他文件方法可查找文件中的新位置、刷新输出缓存等。

打开文件

open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

#函数语法:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
f = open('test.txt','r') 
f.close()

参数说明:

  • name : 必需,文件路径(相对或者绝对路径)。
  • mode : 可选,文件打开模式,默认为只读。
  • buffering : 设置缓冲。

下图是12种Mode。其中’r’代表“read”(只读,文件指针在开头),'w’代表“write”(只写,文件指针在开头,删除原内容),'a’代表“append”(追加,文件指针在末尾)。‘b’代表“binary”(以二进制形式打开),’+'代表读写。
在这里插入图片描述
此外还有 t t 文本模式 (默认)。 x x 写模式,新建一个文件,如果该文件已存在则会报错。 U U 通用换行模式(不推荐)。

file对象

file 对象使用 open 函数来创建,下面列出了 file 对象常用的函数:

#【关闭】
file.close()#关闭文件。关闭后文件不能再进行读写操作。

#【读取】
file.read([size])#从文件读取指定的字节数,如果未给定或为负则读取所有。
#你必须使用bytes字符串处理二进制文件,并且用常规的str字符串处理文本文件。
file.readline([size])#读取整行,包括 "\n" 字符。
file.readlines([sizeint])#读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节
for line in f: 
	print(line,end='') #通过迭代器访问
file.next()#返回文件下一行。	
#如果想不带“\n”,可以把结果print(),这个函数可以很好地解析字符串。

#【写入】	
file.write(str)#将字符串写入文件,返回的是写入的字符长度。
file.writelines(sequence)#向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

读取后,可能需要把字符串转为其他对象:

line.rstrip()#去掉多余的行终止符\n
line.split(',')#从逗号分隔符的地方将整行断开,得到的结果就是含有个别数字的子字符串列表
numbers=[int(P) for P in parts]#把字符串列表转为数字列表
eval('[1,2,3]')#eval这一内置函数,eval能够把字符串当作可执行程序代码

如果要写入字符串以外的数据,先将他转换为字符串:

f.write('spam'+'\n')
f.write('%s %s\n' % (1,2))
f.write(str([1,2,3])+str({'a':1}))

pickle模块

pickle模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,也并不要求我们把字符串转换来转换去。它就像是超级通用的数据格式化和解析工具。例如,想要在文件中储存字典,就直接用pickle来储存。

pickle模块执行所谓的对象序列化(object serialization),也就是对象和字节字符串之间的相互转换。

import pickle
#【存】
D={'a':1,'b':2}
f=open('datafile.pkl','wb')
pickle.dump(D,f)
f.close()
#【取】
f=open('datafile.pkl','rb')
e=pickle.load(f)

文件上下文管理器

Python 3.0和Python 2.6中有所更新。因而比文件自身多了一个异常处理功能,它允许我们把文件处理代码包装到一个逻辑层中,以确保在退出后可以自动关闭文件,而不是依赖于垃圾收集上的自动关闭:

with open(r'data.txt') as myfile:
	for line in myfile:
		print(line)

#等同于:
myfile=open(r'data.txt')
try:
	for line in myfile:
		print(line)
finally:
	myfile.close()
发布了195 篇原创文章 · 获赞 59 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_36622009/article/details/105434766