在《Python中文件的读取2-1》中提到,可以使用read()函数读取文件中所有数据。通过指定read()函数的参数,可以读取文件中指定数量的数据。
1 read()函数读取指定数量的数据
通过read()函数读取指定数量数据的代码如图1所示。
图1 通过read()函数读取指定数量的数据
从第2行中可以看出,read()函数读取文件中前5个数据。假设“words.txt”文件的内容如图2所示,则此时的输出内容是“abcde”。
图2 “words.txt”文件的内容
2 seek()函数移动文件当前位置
2.1 seek()函数的基本用法
在“1 read()函数读取指定数量的数据”中提到的read()函数只能从文件的起始位置处开始读取文件,通过seek()函数可以移动文件的当前位置,也就是可以从任意位置处读取文件内容,代码如图3所示。
图3 从任意位置处读取文件内容
seek()函数的作用是将文件的当前位置后移4位,移动到图2的d和e之间,之后再调用read()函数读取5个数据,此时得到的数据是“efghi”。
2.2 seek()函数的扩展用法
使用seek()函数移动文件当前位置时,还可以指定移动时的起点,代码如图4所示。
图4 seek()函数的扩展用法
其中,第2行中的seek(4,0)表示以文件头为起点向后移动4个数据,之后第3行读取5个数据,因此words1的值是“efghi”;第4行中的seek(4,1)表示以当前位置为起点向后移动4个数据,因为在第3行中read()读取数据之后,文件的当前位置在i和j之间,再向后移动4个数据,此时位置在m和n之间,第5行中读取5个数据,因此words2的值是“nopqr”;第6行中seek(-4,2)表示以文件尾为起点向前移动4个数据,此时文件的当前位置在v和w之间,第7行读取5个数据,因此words3的值是“wxyz”。
注意:使用seek(4,1)时,需要以二进制的方式打开文件,如图4中代码1所示。如果以文本方式打开文件时,会有can't do nonzero cur-relative seeks的错误提示。
3 readlines()函数按行读取所有内容
当文件内容不太多的时候,可以通过readlines()函数按行读取所有内容。该函数以行内容为单位,将文件内容保存到列表中,代码如图5所示。
图5 readlines()函数按行读取所有内容
假设words.txt文件的内容如图6所示,此时words[2]的值是“opqrst”。
图6 words.txt文件的内容