1
前一章节,我们大概了解了文件的打开方式以及一些读写操作,这一章节我们来具体学习一下《python的文件读取方式》
0x00 回顾
read([size]):读取文件(读取size个字节,默认读取全部)
readline([size]):读取一行
readlines([size]):读取文件至内存,返回每一行组成的列表
0x01 read(size)方法
#python.txt的内容为:
#i_love_python1
#i_love_python2
#i_love_python3
f = open("python.txt")
#本文以size为例,无size则默认读取全部,size>len(python.txt)也读取全部,这里主要分析size小于的情况
#第一次读取
f.read(1) //程序打印出i
#第二次读取
f.read(1) //程序则打印出_
#第三次读取
f.read(100) //程序打印出love_python1\ni_love......
#为什么呢?因为第二次read时,文件的指针指向已经发生了变化
0x02 readline(size)方法
#python.txt的内容为:
#i_love_python1
#i_love_python2
#i_love_python3
f = open("python.txt")
#第一次读取
f.readline(1) //程序打印出i
#第二次读取
f.readline(1) //程序则打印出_
#第三次读取
f.readline(100) //程序打印出love_python1\n,指针指向下一行开头
#第四次读取
f.readline() //程序打印出i_love_python2\n,指针指向下一行开头
#注意指针指向的变化
0x03 realines()方法
#python.txt的内容为:
#i_love_python1
#i_love_python2
#i_love_python3
f = open("python.txt")
list_rls = f.readlines(1) //此时的list_rls的值为['i_love_python1\n','i_love_python2\n','i_love_python3\n']
为什么readlines的size(1)不是读取一个字符呢?这时我们要看一下readlines的定义
>>> help(f.readlines)
Help on built-in function readlines:
readlines(...)
readlines([size]) -> list of strings, each a line from the file.
Call readline() repeatedly and return a list of the lines so read.
The optional size argument, if given, is an approximate bound on the
total number of bytes in the lines returned.
#什么是an approximate bound on the total number of bytes?
#其实这里的size并非普通的size,而是io模块的io.DEFAULT_BUFFER_SIZE,这个size的大小为8192
这就意味这当我们的文件远大于8192个字节是,我们使用readlines(1)来读取是,len(list_rls)是一个近似8192的大小
0x04 iter 使用迭代器处理文件
f = open('python.txt')
iter_i = iter(f)
lines = 0 #记录行数
for line in iter_i:
lines += 1
print line
关于迭代器的相关知识,可自行上网搜索学习。