Python:文件对象方法

举报
xiaowunv 发表于 2019/04/15 12:00:11 2019/04/15
【摘要】 本节中剩下的例子将假定你已创建名为 f 的文件对象。要读取文件内容,请调用 f.read(size) ,它会读取一些数据并将其作为python字符串(在文本模式下)或字节对象(在二进制模式下)返回。 size 是一个可选的数字参数。当 size 被省略或者为负的时候,将读取并返回文件的整个内容;如果文件的大小是机器内存的两倍,那么就可能出现问题。否则,最多读取并返回 size 字节的内容,如...

本节中剩下的例子将假定你已创建名为 f 的文件对象。

要读取文件内容,请调用 f.read(size) ,它会读取一些数据并将其作为python字符串(在文本模式下)或字节对象(在二进制模式下)返回。 size 是一个可选的数字参数。当 size 被省略或者为负的时候,将读取并返回文件的整个内容;如果文件的大小是机器内存的两倍,那么就可能出现问题。否则,最多读取并返回 size 字节的内容,如果已到达文件末尾,f.read() 将返回一个空字符串 ('')。

>>>

>>> f.read()'This is the entire file.\n'>>> f.read()''

f.readline() 从文件中读取一行;换行符(\n)留在字符串的末尾,如果文件不以换行符结尾,则在文件的最后一行省略。这使得返回值明确无误;如果 f.readline() 返回一个空的字符串,则表示已经到达了文件末尾,而空行使用 '\n' 表示,该字符串只包含一个换行符。:

>>>

>>> f.readline()'This is the first line of the file.\n'>>> f.readline()'Second line of the file\n'>>> f.readline()''

要从文件中读取行,你可以循环遍历文件对象。这是内存高效,快速的,并简化代码:

>>>

>>> for line in f:...     print(line, end='')...This is the first line of the file.Second line of the file

如果你想以列表的形式读取文件中的所有行,你也可以使用 list(f) 或 f.readlines()

f.write(string) 会把 string 的内容写入到文件中,并返回写入的字符数。:

>>>

>>> f.write('This is a test\n')15

在写入其他类型的对象之前,需要先把它们转化为字符串(在文本模式下)或者字节对象(在二进制模式下):

>>>

>>> value = ('the answer', 42)>>> s = str(value)  # convert the tuple to string>>> f.write(s)18

f.tell() 返回一个整数,给出文件对象在文件中的当前位置,表示为二进制模式下时从文件开始的字节数,以及文本模式下的不透明数字。

要改变文件对象的位置,请使用 f.seek(offset, from_what) 。通过向参考点添加 offset 来计算位置;参考点由 from_what 参数指定。from_what*值为0时,表示从文件开头开始,1 表示从当前位置,2 表示把文件末尾作为参考点。*from_what 可以省略,默认为0,即使用文件开头作为参考点。:

>>>

>>> f = open('workfile', 'rb+')>>> f.write(b'0123456789abcdef')16>>> f.seek(5)      # Go to the 6th byte in the file5>>> f.read(1)b'5'>>> f.seek(-3, 2)  # Go to the 3rd byte before the end13>>> f.read(1)b'd'

在文本文件(那些在模式字符串中没有 b 的打开的文件)中,只允许相对于文件开头搜索(使用 seek(0, 2) 搜索到文件末尾是个例外)并且唯一有效的 offset 值是那些能从 f.tell() 中返回的或者是零。其他 offset 值都会产生未定义的行为。

文件对象有一些额外的方法,例如 isatty() 和 truncate() ,它们使用频率较低;有关文件对象的完整指南请参阅python教程


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。