对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等。
而在python中提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。也可保存数据。其中最常见的文件操作就是文件读写操作。
文件读写
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
读文件
要以读文件的模式打开一个文件对象,使用Python内置的open()
函数,传入文件名和标示符
f = open('E:\LINUX\xx.txt','r')
标示符'r'表示读,这样,我们就成功地打开了一个文件。
如果文件不存在,就会报错
文件打开成功,接下来,调用read()
方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str
对象表示:
f.read()
'Hello, world!'
在完成后,然后调用close()方法关闭文件,在python中,系统会默认帮你关闭,但这种方法不安全,也没有时间的确定性,所以我们在完成读写文件操作后,一定要记得去关闭它
f.close()
写文件
写文件和读文件是一样的,唯一区别是调用open()
函数时,传入标识符'w'
或者'wb'
表示写文本文件或写二进制文件:
f = open('文件存放的路径', 'w')
f.write('Hello, world!')
f.close()
我们在执行文件的读写操作时,我们会发现,不管是写文件还是读文件,最后都会去调用close()方法去关闭文件。这出于对文件的安全性考虑,不过也不排除粗心的人在执行完文件读写后,忘记调用close()方法。出于这种考虑。python中还有一种不用调用close()的文件读写操作方法。就是with方法。
with open('文件路径', 'w') as f:
f.write('Hello, world!')
附:不同模式打开文件的完全列表
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
文件定位
tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。
seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
注:foo.txt文件是我们事先创建好的文件 fo = open("foo.txt", "r+")
str = fo.read(10);
print ("读取的字符串是 : ", str) # 查找当前位置
position = fo.tell();
print( "当前文件位置 : ", position) # 把指针再次重新定位到文件开头
position = fo.seek(0, 0);
str = fo.read(10);
print ("重新读取字符串 : ", str)
# 关闭打开的文件
fo.close()
列出file对象常用的函数
file.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
#最常用的就是进度条实例
import sys,time
for i in range(30):
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.1) file.truncate([size]) #截取文件,截取的字节通过size指定,默认为当前文件位置
f.truncate(5)
f.write('hello world')
f.truncate(5)
f.close()
注:该方法不能在 "r" 模式下进行。
在w模式下:先清空,再写,再截断
在a模式下:直接将指定位置后的内容截断 file.read([size]) #从文件读取指定的字节数,如果未给定或为负则读取所有。
file.readline([size])#读取整行,包括 "\n" 字符。
file.readlines([sizehint])#读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。