读文件读文件需要三个步骤:
步骤1: 以读文件的模式打开一个文件对象,使 用Python内置的open()函数,传入文件名和标示符。标示符'r'表示读。如果文件不存在,open()函数就会抛出一个IOError的错误。
步骤2: 如果文件打开成功,调用read()等方法读取文件内容,Python把内容读到内存,用一个ret对象表示。
步骤3: 调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源。
读文件具有如下三种方法:
方法一:read()方法 read()方法用于一次性将文件里的内容全部读取,也可以指定每次读多少个字节,如read(8)就是从文件开始读取5个字节。
方法二:readline()方法 readline( )用于一行行地读出并显示文件内容。如果读到文件末尾,就返回一个空字符串。
方法三:readlines()方法 readlines()方法自动将文件内容存储为列表。
open 函数有3个参数:file, mode, encoding
file:表示要保存或要打开的文件的路径。
mode:表示数据以何种方式打开、写入文本。
encoding:指定了文件的编码方式。如utf-8等
其中mode可选
![](https://img-blog.csdnimg.cn/img_convert/b4fdeb4a95db5232bcee5bc118ffeb9b.png)
值得注意的是文件指针这一个概念,文件指针在开头意味着你只能从开头读取或写入数据,以追加模式打开文件意味着文件指针在末尾,只能从末尾开始读写。
例如我以r+模式打开txt文件进行编写,txt文件内容如下
you are the best
you can do it
代码如下
f = open("1.txt", "r+", encoding='utf-8')
ret = f.read()#read函数将文本文件中的所有内容以字符串保留下来
f.seek(len(ret)+1) # 将文件指针移到末尾
f.write("\nyes") # 写入字符串
f.seek(0, 0) # 文件指针回到头部
ret = f.read()
print(ret)
f.close()
结果会是
![](https://img-blog.csdnimg.cn/img_convert/1358b2d61c5df169b72cb02087b3fb7d.png)
题外话:seek函数
seek ()方法一般形式为: 文件对象. seek (offset, whence) 功能:把文件指针移动到相对于whence的offset位置。其中,offset表示要移动的字节数,移动时以offset为基准,offset为正数表示向文件末尾方向移动,为负数表示向文件开头方向移动;whence指定移动的基准位置,为0表示以文件开始处作为基准点,为1表示以当前位置为基准点,为2表示以文件末尾作为基准点。 不得不提一下: 在不同的文件打开格式下seek的参数是有限制的,例如在r+下,seek的whence参数只能是0,seek的offset参数只能为正数。原因是在文本文件中,没有使用b模式选项打开的文件,只允许从文件头开始计算相对位置,而使用b模式又是以二进制模式打开文件。
如果上面函数没有用seek函数直接移动而是以write函数直接写入的话如下
f = open("1.txt", "r+", encoding='utf-8')#这行r+改a+可以得到上一个代码块的运行结果
ret = f.read()
# f.seek(len(ret)+1) # 将文件指针移到末尾
f.write("\nyes") # 写入字符串
# f.seek(0,0) # 文件指针回到头部
# ret = f.read()
print(ret)
f.close()
运行结果就会是
![](https://img-blog.csdnimg.cn/img_convert/7356f7d5649399379778abf0e8ce33e4.png)
值得注意的是r+的写入方法是覆盖式的,这也是问什么len(ret)要加1的原因