方法一、
用open()的方法(open()返回一个文件对象,它是可迭代的)
f = open('test.txt',’r‘)
r表示文本文件,rb是二进制文件,默认r
若文件不存在,则该函数会抛出一个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('test.txt','r')
print(f.read()) #do anything you want
finally:
if f:
f.close()
问题解决了,但是写法有点繁琐
方法三、
这是最常用的方法,也是最推荐的
with open('test.txt','r') as f:
print(f.read())
python的文件对象提供了三个读方法:read()、readline()、readlines()
每种方法都可以接受一个变量以限制每次读取的数据量。
- read() :每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。为了避免文件大于可用内存的情况出现,可以反复调用read(size)方法,即每次最多读取size个字节的内容。
- readlines() : 像 .read() 一样,readlines()一次读取整个文件,但.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for … in … 结构进行处理。
- readline() : 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。
注意:这三种方法是把每行末尾的’\n’也读进来了,它并不会默认的把’\n’去掉,需要我们手动去掉。如:
with open('test.txt','r') as f:
mlist = f.readlines()
#此时mlist = ['111\n', '222\n', '333\n', '444\n']
for i in range(len(mlist)):
mlist[i] = mlist[i].rstrip('\n')
#此时mlist = ['111', '222', '333', '444']