Python文件读取方法详解:read、readlines与readline的区别及内存优化
本文深入解析Python中文件读取的三种核心方法:read()、readlines()和readline()。重点对比它们在返回类型、内存占用及适用场景上的差异,特别是针对大文件读取时的内存优化策略。同时,结合fp.readlines()、str.strip()和str.split()等常用字符串处理函数,讲解从文件读取字符串到数值转换的完整流程,并解决常见的io.UnsupportedOperation错误。
with open(filename) as fp:
dataMat = []
for line in fp.readlines():
# fp.readlines()返回一个list,list of strs
# 也即line类型为`str`
curLine = line.strip().split('\t')
# 只有`str`类型才有strip()成员函数,
# 在经过split()分割,得到list类型
# 也即curLine类型为list
# curLine 仍然是由字符串构成的list
dataMat.extend([float(entry) for entry in curLine])
# 对每一个类型进行强转
文件流成员函数
(1)fp.readlines():该方法返回一个由字符串组成的列表(list of strs),其中文件中的每一行被视为一个独立的字符串,行与行之间的分隔符为换行符\n。
(2)str.strip():这是字符串对象的一个成员函数,其作用是去除字符串首尾的指定字符(默认为空白字符),返回的结果依然是一个字符串。
(3)str.split():同样是字符串的成员函数,用于根据指定的分隔符对字符串进行分割,返回值是一个由字符串构成的列表(list of strs)。
(4)从文件中读取的数据(无论是整行还是切分后的部分)均为字符串类型。若需进行数值计算,必须通过强制类型转换将其转换为数值类型。
read()、readlines()、readline()
(1)read():一次性读取文件的全部内容,数据会加载到内存中,返回类型为字符串(str)。
(2)readlines():一次性读取文件的所有行,数据同样置于内存中,返回类型为字符串列表(list of strs),这种方式较适合按行进行迭代处理。
for line in fp.readlines():
...
# line 中的内容其实就是 readline 的内容
(3)readline():逐行读取文件内容,每次调用返回一行字符串,返回类型为str。
while True:
line = fp.readline()
if not line:
break
...
当需要读取的文件体积过大时,出于内存占用的考虑,应优先使用readline()方法进行逐行读取,以避免一次性加载全部数据导致内存溢出。
io.UnsupportedOperation: read
即表示不支持读操作。在使用with open() as fp语句时,如果文件流fp无法读取,通常是因为获取文件的mode(模式)不正确。例如,若将模式设置为'w'(只写文本模式)或'wb'(只写二进制模式),则文件对象仅支持写入,不支持读取。
总结
以上就是本文的全部内容,希望这些关于Python文件读取的讲解能对您的学习或工作有所帮助。感谢大家对本站的支持。如需了解更多相关技术细节,请查阅下方的相关链接。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









