- Python编程基础与科学计算
- 李增刚 戴光昊 廖晖编著
- 769字
- 2025-02-24 05:30:35
4.2.2 读取数据
从文件中读取数据,需要用文件对象的read()、readline()和readlines()方法,用readable()方法可以判断文件是否可以读取。
1.read()方法
read()方法的格式是read(size=-1),其中size表示读取的字符数,包括换行符\n,不输入size或size为负数表示读取所有的数据。read()方法返回字符串数据。
用记事本在磁盘上建立student.txt文件,并在文件中写入如图4-1所示的内容,注意编码方式是“UTF-8”。用read()方法读取文件中的所有信息,然后计算出个人总成绩和平均成绩并输出。为防止打开和读取文件出错,可以使用try语句。

图4-1 学生考试成绩

用read()方法读取文件时,文件指针指向文件开始部分,表示从文件起始位置开始读取。如果只想读取文件中的某段内容,需要使用seek()方法移动到指定位置。seek()方法的格式是seek(offset,whence=0),其中offset表示移动量,whence=0表示从文件起始开始计算移动量,whence=1表示从当前位置计算移动量,whence=2表示从文件结尾反向计算移动量,默认为0,对于文本文件只能从文件起始位置计算移动量。一个英文字母或数字占一个字符,GBK编码一个汉字占用两个字符,UTF编码一个汉字占三个字符。seek()方法不适合中文和英文混合的文本文件,因为不容易计算offset量。另外用tell()方法可以输出指针的位置,用seakable()方法可以判断是否可以移动文件指针。
下面的代码每隔40个字符输出20个字符。

2.readline()方法
readline()方法每次只能读一行,返回字符串,如果知道文件中的总行数,可以指定读取多少行内容;如果不知道总行数,可以用while循环读取所有行,例如下面的代码。readline()方法的读取速度比read()和readlines()方法要慢,优点是可以立即对每行进行处理,例如如果文件中有空行,可以立即去除空行,例如下面的程序。

3.readlines()方法
readlines()方法读取文件中的所有行,返回由行数据构成的列表。与read()方法相比,readlines()方法返回的是字符串列表,而不是字符串;与readline()方法相比,readlines()方法不能立即对每行数据进行处理。
