python基础教程:文件读写

栏目: Python · 发布时间: 5年前

内容简介:在Linux系统中,一切都是文件。但我们通常说的文件是保存在磁盘上的图片、文档、数据、程序等等。而在程序的IO操作中,很多时候就是从磁盘读写文件。本节我们讲解Python中的文件对象如何操作文件。通过Python内置函数

Linux 系统中,一切都是文件。但我们通常说的文件是保存在磁盘上的图片、文档、数据、程序等等。而在程序的IO操作中,很多时候就是从磁盘读写文件。本节我们讲解 Python 中的文件对象如何操作文件。

python基础教程:文件读写

创建文件对象

通过Python内置函数 open() 可以很容易的创建一个文件对象。open函数有很多参数,最常用的有两个,使用open函数最常用的方法是: open(filename, mode)

f = open('myfile', 'w')

第一个参数 filename 是文件名的字符串,比如 myfile 。第二个参数也是一个字符串,表示文件使用方式。 mode 的可选项如下:

mode 含义
‘r’ 以只读模式打开(默认)
‘w’ 以可写模式打开,并清楚文件内容(如果文件存在的话)
‘x’ 创建一个新文件并以可写模式打开
‘a’ 以可写模式打开,从文件末尾开始写入(如果文件存在的话)
‘b’ 二进制模式
‘t’ 文本模式(默认)
’+’ 打开一个已存在文件以便进行更新(读和写)

其中的 'b''t' 是指定文件内容是文本还是二进制,其它都说是关于读写方式的。

'b' 是二进制模式打开文件,读写的数据都是字节对象(bytes),这个模式可以读写一切文件,包括文本文件,但读写文本文件时要注意编码的问题。

't' 是文本模式下读写文件。读取时,默认会把平台特定的行结束符 (Unix 上的 \n , Windows 上的  \r\n )转换为 \n 。写入是,默认会把出现的 \n 转换回平台特定的结束符。这种默认的“幕后修改”对文本文件来说没有问题,但会破坏二进制数据(比如,JPEG或exe)文件中的数据。

在使用 open 创建文件对象时,最好使用  with 关键字。其好处是,当字句体结束后文件会正确关闭,即使在某个时刻引发了异常。并且 with 比等效的 try-finally 代码块更简短:

In [102]: with open('myfile') as f: 
     ...:     data = f.read() 
     ...:

In [103]: f.closed   
Out[103]: True

如果没使用 with 关键字,就要调用 f.close() 来关闭文件并立即释放它使用的系统资源。如果没有显示的关闭文件,Python的垃圾回收器最终将销毁该对象并为你关闭打开的文件,但这个文件可能会保持打开状态一段时间。另外一个风险是不同的Python实现会在不同的时间进行清理。

通过 with 语句或者调用 f.close() 关闭文件对象后,尝试使用该文件对象将自动失败。

文件对象的方法

通过上面的方法创建文件对象 f 后,,我们就可以通过其对应的方法读写数据了。

(1)写内容到文件:f.write(string)

把内容写入文件的方法是 write() 方法,传递的对象必须是字符串(文本模式下)或字节对象(二进制模式下)。如果要写入其它类型的对象(比如,字典、列表等等),就要先把它们转换成字符串(文本模式下)或字节对象(二进制模式下)。

In [109]: f = open('myfile', 'w')

In [110]: f.write('认真学Python,就是文件的全部内容。\n')
Out[110]: 21

In [111]: f.close()

(2)读取文件内容:f.read(size)

它会读取文件里面的数据并将其返回为字符串(在文本模式下),或者字节对象(二进制模式)。参数 size 是一个可选的整数参数,当 size 被省略或为负的时候,读取文件的全部内容;如果文件的大小是机器内存的两倍或更大,那么可能出现错误。读取并返回的size大小的内容。如果已经读完全部内容(到达文件末尾),将返回一个空字符串。

In [112]: f = open('myfile')

In [113]: f.read()
Out[113]: '认真学Python,就是文件的全部内容。\n'

In [114]: f.read()
Out[114]: ''

f.readline() 从文件读取一行,换行符 \n 留住字符串末尾;

f.readlines() 读取文件所有行,返回一个字符串的列表;

In [118]: f.readline()
Out[118]: '认真学Python,就是文件的全部内容。\n'

In [119]: f.seek(0)
Out[119]: 0

In [120]: f.readlines()
Out[120]: ['认真学Python,就是文件的全部内容。\n']

遍历文件的所有行,也可以用遍历文件对象的方式,这是内存高效、快速并简单的方式:

In [122]: for line in f: 
     ...:     print(line) 
     ...:
认真学Python,就是文件的全部内容。

(3)文件对象的位置

前面的例子中,我们已经读到文件的末尾,如果要再从头读的话就要调用 f.seek(0) 来设置文件对象的位置到文件开头。这个方法有两个参数: f.seek(cookie, whence=0)

  • cookie 是位置偏移量
  • whence 是相对位置,它有三种相对位置:

    • 0 文件开头,偏移量是0或整数;
    • 1 当前位置,偏移量可以是负数;
    • 2 文件末尾,偏移量通常是负数;

如何查看当前位置呢?调用 f.tell() 方法。


以上所述就是小编给大家介绍的《python基础教程:文件读写》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java从入门到精通

Java从入门到精通

李钟尉、马文强、陈丹丹 / 清华大学出版社 / 2008-9 / 59.80元

《Java从入门到精通》(软件开发视频大讲堂)从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发应该掌握的各方面技术。全书共分28章,包括:初识Java,熟悉Eclipse开发工具,Java语言基础,流程控制,字符串,数组,类和对象,包装类,数字处理类,接口、继承与多态,类的高级特性,异常处理,Swing程序设计,集合类,I/O输入输出,反射,枚举类型与泛......一起来看看 《Java从入门到精通》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具