python基础——文件IO操作详解

花间影清欢课程 2024-03-30 23:12:23

文件IO操作详解

声明:记得收藏,文末有上下文件管理器不一样的干货!

一、 简述

在Python3里提供了open函数来对文件操作,Python2中有file函数。

二、打开文件模式汇总r 以只读方式打开文件,文件指针将会放在文件开头的位置,这也是默认的模式;w 以只写入的方式打开文件,如果文件存在内容,会清空文件后,再打开,文件指针在开头的位置。如果文件不存在,则创建新文件;a 打开文件以追加的模式,如果该文件存在,文件指针会放到文件末尾的位置,也就是说新的内容会将被写入到文件的末尾。如果文件不存在,创建新文件来写入。x Python3里新添加的模式,以只写入的方式打开文件,文件内容如果存在会报错,否则则创建新文件。一般建议,写入时使用x而不用w;r+ 读写模式打开文件,文件指针会在开头的位置;w+ 写读模式打开文件,如果文件里有内容,就会覆盖,否则的话,会创建新文件,使用场景还是不多;a+ 写读模式打开文件,如果存在,文件指针会放在文件的结尾。文件打开时会是追加模式,如果不存在会创建新的文件;x+ 写读模式打开文件;rb 二进制读模式打开文件,文件指针会放在文件的开头;rb+ 二进制只读模式打开文件,文件指针会放在文件的开头;wb 二进制的只写模式打开文件,如果文件存在会清空文件,否则创建新文件;wb+ 二进制写读模式,如果文件存在会覆盖文件,否则会创建新文件;xb 二进制只写,如果文件存在报错,否则创建新文件。xb+ 二进制写读模式打开文件,如果存在覆盖,否则创建新文件。ab 二进制追加模式打开文件,如果存在文件,文件指针在末尾,文件打开时会是追加模式,新内容在旧内容之后,如果文件不存在,创建新文件来写入。ab+ 二进制写读模式打开,如果存在文件,文件指针在末尾,如果不存在,创建新文件。三、常用属性与方法

1、open()函数语法

# 使用open函数的语法:file object = open(file_name [, access_mode][, buffering])''' file object: 文件句柄,在后面通过此句柄对该文件操作等等; file_name: 文件名称,如果不在当前目录下,需要制定绝对/相对路径 access_mode: 打开模式,表示允许对文件操作的权限等 buffering:如果值为0,就不会有寄存。如果为1,访问文件时会寄存。 如果值设定大于1的整数,说明这就是寄存区的大小。 如果取负值,寄存区的缓冲大小则为系统默认。'''

2、closed 如果返回为True表示文件已关闭,否则为False

>>> f.closedFalse>>> f.close()>>> f.closedTrue

3、mode 查看文件打开的模式

>>> f = open('test4.txt','ab+')>>> f.mode'ab+'

4、name 文件名

>>> f.name'test4.txt'

5、raw 查看文件句柄详细信息

>>> f.raw<_io.FileIO name='test4.txt' mode='ab+'>

6、encoding 查看编码

>>> f.encoding'UTF-8'

7、close 关闭文件句柄

>>> f.close()

8、read 读取指定字节数据,如果不指定值,则返回整个文件内容

>>> f.read()'1,2,3abc'>>> f.read(3)'1,2'

9、readline 仅读取一行数据,可以指定读取的字节数

# 文件内容三行>>> f.read()'1,2,3abc\nABC\nDEF'>>> f.seek(0)0# 一次只读取一行内容>>> f.readline()'1,2,3abc\n'>>> f.tell()9>>> f.seek(0)0# 可以指定读取的字节数>>> f.readline(3)'1,2'

10、readlines 读取所有数据,并根据换行符保存内容至列表

>>> f.seek(0)0# 全部放在列表中>>> f.readlines()['1,2,3abc\n', 'ABC\n', 'DEF']>>> f.seek(0)0#对列表可做进一步操作>>> f.readlines()[0]'1,2,3abc\n'

11、readable 文件是否可读,可读返回True,否则返回False

>>> f = open('test.txt','r+')>>> f.readable()True>>> f.close()>>> f = open('test.txt','a')>>> f.readable()False

12、write 写内容(字符串)

>>> f.write('balbalbalallla')14>>> f.seek(0)0>>> f.read()'1,2,3abc\nABC\nDEFbalbalbalallla'

13、writelines 写内容(列表)

#写入字符串,也OK>>> f.writelines('这是啥我也不知道')>>> f.tell()>>> f.read()''>>> f.seek(0)>>> f.read()'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道'# write写字符串也ok>>> s1 = 'daniel'>>> f.write(s1)>>> f.writelines(s1)>>> f.seek(0)>>> f.read()'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldaniel'#来试下列表>>> l1 = ['i','am','is','supperman']# write失败>>> f.write(l1)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: must be str, not list# writelines没问题>>> f.writelines(l1)>>> f.seek(0)>>> f.readlines()['1,2,3abc\n', 'ABC\n', 'DEFbalbalbalallla这是啥我也不知道danieldanieliamissupperman']>>> f.seek(0)>>> f.read()'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldanieliamissupperman'#来试下元组>>> t1 = ('a','b','c','d')>>> f.write(t1)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: must be str, not tuple# writelines 是ok的>>> f.writelines(t1)>>> f.seek(0)>>> f.read()'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldanieliamissuppermanabcd'#测试下字典>>> d1 = {'k1':'v1','k2':'v2'}>>> f.write(d1)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: must be str, not dict# writelines 还是ok的>>> f.writelines(d1)>>> f.seek(0)>>> f.read()'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldanieliamissuppermanabcdk1k2'

14、writable 是否可写,可写返回True,否则返回False

>>> f.writable()True

15、tell 返回当前指针位置

>>> f.tell()0

16、seek 移动指针位置

>>> f.read()'1,2,3abc\nABC\nDEF'>>> f.seek(3)3>>> f.read()',3abc\nABC\nDEF'

17、seekable 指针是否可读。是: True, 否:False,Python3新增

>>> f.seekable()True

18、fileno 返回一个文件的文件描述符,可以用在os模块的read方法等一些底层的操作

>>> f.fileno()3

19、isatty 判断文件是否连接在一个终端设备,是:true,否:False

>>> f.isatty()False

20、truncate 截断文件,截取的字节通过参数提供,默认为当前指针位置

>>> f.tell()0#看下所有文件内容>>> f.read()'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldanieliamissuppermanabcdk1k2'#再把指针指向开始位置>>> f.seek(0)0# 截取三个字符>>> f.truncate(3)3#查看文件指针>>> f.tell()0# 查看文件>>> f.read()'1,2'>>> f.read()''>>> f.seek(0)0>>> f.read()'1,2'>>> f.seek(0)0#如果不提供参数,从当前默认的指针位置开始截取,当前为开始位置,所以清空文件内容>>> f.truncate()0>>> f.read()''>>> f.seek(0)0>>> f.read()

21、flush 刷写文件内部缓存,直接把缓冲区的数据立即写入文件,而不是被动的等待缓冲区写入。

>>> f.flush()四、上下文管理器上面的文件操作,打开操作完成之后每次都需要关闭文件,为了避免忘记,可以通过(with)管理上下文:'''打开test.txt文件以r+模式,并别名为f,操作完成后内部会自动关闭并释放文件资源'''with open('test.txt','r+') as f: pass另外在python2.7以后,with也支持同时打开两个文件来操作:with open('test.txt','r') as f1, open('test2.txt','w') as f2: pass
0 阅读:0