读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
一、open() 方法
Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
完整的语法格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
二、读文件
打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的):
f = open('test.txt', 'r')
标示符'r'表示读,这样,我们就成功地打开了一个文件。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print('执行读方法1')
try:
f = open('1.txt', 'r',encoding='UTF-8')
print("文件内容:"+f.read())
finally:
if f:
f.close()
print("执行读方法2")
with open('1.txt', 'r',encoding='UTF-8') as f:
print("文件内容:"+f.read())
- 由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现。
- Python引入了with语句来自动帮我们调用close()方法。
python文件对象提供了三个“读”方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量。
- read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。
- readlines() 之间的差异是后者一次读取整个文件,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。
- readline() 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。
三、写文件
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件。
python文件对象提供了两个“写”方法: write() 和 writelines()。
- write()方法和read()、readline()方法对应,是将字符串写入到文件中。
- writelines()方法和readlines()方法对应,也是针对列表的操作。它接收一个字符串列表作为参数,将他们写入到文件中,换行符不会自动的加入,因此,需要显式的加入换行符。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print("执行写方法1")
f = open('1.txt', 'w')
f.write('hi-laoz.com')
f.close()
print("执行写方法2")
with open('2.txt', 'w') as f:
f.write('1668s.com')
print("执行写方法3")
f1 = open('3.txt', 'w')
f1.writelines(["hi-laoz.com\n", "1668s.com\n", "qq.com\n"])
三、文件追加内容
调用open()函数时,可以传入'a'以追加(append)模式写入,表示打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
f = open('1.txt', 'a', encoding='utf8') #在最后一行追加
f.write('\n在最后一行追加')