百科狗-知识改变命运!
--

Python文件读取相关方法

乐乐1年前 (2023-11-21)阅读数 37#技术干货
文章标签文件

我们知道,对文件的读取操作需要将文件中的数据加载到内存中,而上面所用到的read()方法会一次性把文件中所有的内容全部加载到内存中。这明显是不合理的,当遇到一个几个G的的文件时,必然会耗光机器的内存。这里我们来介绍下Python中读取文件的相关方法:

方法描述

read()一次读取文件所有内容,返回一个str

read(size)每次最多读取指定长度的内容,返回一个str;在Python2中size指定的是字节长度,在Python3中size指定的是字符长度

readlines()一次读取文件所有内容,按行返回一个list

readline()每次只读取一行内容

此外,还要两个与文件指针位置相关的方法

方法描述

seek(n)将文件指针移动到指定字节的位置

tell()获取当前文件指针所在字节位置

下面来看下操作实例

1.读取指定长度的内容

Python2

withopen('song.txt','r')asf:

print(f.read(12).decode('utf-8'))

输出结果:

匆匆那年

结果说明:Python2中read(size)方法的size参数指定的要读取的字节数,而song.txt文件是UTF-8编码的内容,一个汉字占3个字节,因此12个字节刚好是4个汉字。

Python3

withopen('song.txt','r',encoding='utf-8')asf:

print(f.read(12))

输出结果:

Python文件读取相关方法

匆匆那年我们究竟说

结果说明:Python3中read(size)方法的size参数指定的要读取的字符数,这与文件的字符编码无关,就是返回12个字符。

2.读取文件中的一行内容

Python2

withopen('song.txt','r',encoding='utf-8')asf:

print(f.readline())

Python3

withopen('song.txt','r')asf:

print(f.readline().decode('utf-8'))

输出结果都一样:

匆匆那年我们究竟说了几遍再见之后再拖延

3.遍历打印一个文件中的每一行

这里我们只以Python3来进行实例操作,Python2仅仅是需要在读取到内容后进行手动解码而已,上面已经有示例。

方式一:先一次性读取所有行到内存,然后再遍历打印

withopen('song.txt','r',encoding='utf-8')asf:

forlineinf.readlines():

print(line)

输出结果:

匆匆那年我们究竟说了几遍再见之后再拖延

可惜谁有没有爱过不是一场七情上面的雄辩

匆匆那年我们一时匆忙撂下难以承受的诺言

只有等别人兑现

这种方式的缺点与read()方法是一样的,都是会消耗大量的内存空间。

方式二:通过迭代器一行一行的读取并打印

withopen('song.txt','r',encoding='utf-8',newline='')asf:

forlineinf:

print(line)

输出结果:

匆匆那年我们究竟说了几遍再见之后再拖延

可惜谁有没有爱过不是一场七情上面的雄辩

匆匆那年我们一时匆忙撂下难以承受的诺言

只有等别人兑现

另外,发现上面的输出结果中行与行之间多了一个空行。这是因为文件每一行的默认都有换行符,而print()方法也会输出换行,因此就多了一个空行。去掉空行也比较简单:可以用line.rstrip()去除字符串右边的换行符,也可以通过print(line,end='')避免print方法造成的换行。

file类的其他方法:

方法描述

flush()刷新缓冲区数据,将缓冲区中的数据立刻写入文件

next()返回文件下一行,这个方法也是file对象实例可以被当做迭代器使用的原因

truncate([size])截取文件中指定字节数的内容,并覆盖保存到文件中,如果不指定size参数则文件将被清空;Python2无返回值,Python3返回新文件的内容字节数

write(str)将字符串写入文件,没有返回值

writelines(sequence)向文件写入一个字符串或一个字符串列表,如果字符串列表中的元素需要换行要自己加入换行符

fileno()返回一个整型的文件描述符,可以用于一些底层IO操作上(如,os模块的read方法)

isatty()判断文件是否被连接到一个虚拟终端,是则返回True,否则返回False

以上内容为大家介绍了Python文件读取相关方法,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:开发教育。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)