文件操作
Posted leiting7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件操作相关的知识,希望对你有一定的参考价值。
文件操作
1、介绍
计算机系统分为,计算机硬件,操作系统,应用程序 三部分
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。
有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:
读文件
# 默认打开文件的模式:rt read text
打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的):
f = open('test.txt', 'r')
r表示是文本文件,rb是二进制文件。(这个mode参数默认值就是r)
如果文件不存在,open()
函数就会抛出一个IOError
的错误,并且给出错误码和详细的信息告诉你文件不存在:
f=open('test.txt', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的
f.close()
由于文件读写时都有可能产生IOError
,一旦出错,后面的f.close()
就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally
来实现:
try:
f = open('file', 'r')
print(f.read())
finally:
if f:
f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with
语句来自动帮我们调用close()
方法:
with open('file', 'r') as f:
print(f.read())
python文件对象提供了三个“读”方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量。
read()
每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用read(size)
方法,每次最多读取size个字节的内容。readlines()
之间的差异是后者一次读取整个文件,象 .read() 一样。.readlines()
自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ..… 结构进行处理readline()
每次只读取一行,通常比readlines()
慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用readline()
。
注意:这三种方法是把每行末尾的‘ ‘也读进来了,它并不会默认的把‘ ‘去掉,需要我们手动去掉。
with open('test1.txt', 'r') as f1:
list1 = f1.readlines()
list1
['111
', '222
', '333
', '444
', '555
', '666
']
去掉‘ ‘
with open('test1.txt', 'r') as f1:
list1 = f1.readlines()
for i in range(0, len(list1)):
list1[i] = list1[i].rstrip('
')
list1
['111', '222', '333', '444', '555', '666']
对于read()
和readline()
也是把‘
‘读入了,但是print的时候可以正常显示(因为print里的‘
‘被认为是换行的意思)
readable(),writable() 判断当前文件是否可读写
# f = open("a.txt")
#
# print(f.readable()) # 判断当前文件是否可读
# print(f.writable()) # 判断当前文件是否可写
#
# # del f # 回收变量资源
# f.close() # 回收操作系统的资源
with open()
可以同时打开多个文件
# with open('a.txt',mode='r')as rf,# open('a.txt',mode='w')as wf:
写文件
写文件和读文件是一样的,唯一区别是调用open()
函数时,传入标识符‘w‘
或者‘wb‘
表示写文本文件或写二进制文件:
>>> f = open('test.txt', 'w') # 若是'wb'就表示写二进制文件
>>> f.write('Hello, world!')
>>> f.close()
注意:‘w‘这个模式是酱紫:如果没有这个文件,就创建一个;如果有,那么就会先把原文件的内容清空再写入新的东西。所以若不想清空原来的内容而是直接在后面追加新的内容,就用‘a‘这个模式。
我们可以反复调用write()
来写入文件,但是务必要调用f.close()
来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()
方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()
的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with
语句来得保险:
'r':只读
'w':只写(慎用)如果文件内存在数据,会将数据清空,重新写入
'a':追加(如果文件不存在,则新建一个文件写入数据)
'r+' == r+w(可读可写,文件若不存在就报错(IOError))
'w+' == w+r(可读可写,文件若不存在就创建)
'a+' ==a+r(可追加可写,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就好啦:
'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'
以上是关于文件操作的主要内容,如果未能解决你的问题,请参考以下文章