目录
1、文件读写原理和操作步骤
1.1、文件读写原理
文件读写就是一种常见的io操作,python也应该是封装操作系统的底层接口,直接提供了文件读写相关的操作方法,读写文件时需要请求操作系统打开一个对象,(文件描述符:简写为jd)这就是我们在程序中要操作的文件对象
1.2、文件的操作步骤
- 打开文件,获取文件描述符
- 操作文件描述符,---读/写
- 关闭文件
注意事项:
- 文件读写操作完成后,要及时的关闭文件。
原因:
因为,文件对象会占用系统的资源,另一方面,操作系统对同一时间能打开的文件描述符的数量是有限制的,在linux系统上通过ulimit-n 来查看这个显示的数量。如果不及时的关闭文件,可能会造成句柄占用,数据丢失。因为当将数据写入文件时,操作系统不会立即把数写入到磁盘中,而是先把数据存入到内存缓冲区异步写入磁盘。当调用close方法的时候,操作系统会保证把没有写入磁盘的数据全部写入到磁盘中去,否则丢失数据。
1.3、文件打开模式
1、open方式打开
语法:
open(file,mode="r",encoding=None)
- file:文件名称,如果代码和所在的文件是同一个目录下,则不用重写书写路径,否则如果不在同一个路径下,需要写上具体的路径。
- mode:决定了打开文件的模式,默认是read模式
- encoding:如果不写则默认为gbk模式,也就是对应txt的ansi模式。如果写明utf8,则txt文件中保存也必须是utf8的模式。
示例:
方法1:用open方法打开,需要关闭文件。
#coding=utf-8
fp=open("e://a.txt","r")
str=fp.read()
print(str)
#关闭文件
fp.close()
方法2:用with...open方式打开
with方式打开文件:会默认关闭文件,这种方式比较推荐。
#coding=utf-8
with open ("e:\\a.txt","r",encoding="utf-8") as fp:
for line in fp:
print(line)
注意事项:
1、文件的书写模式为:“e:\\a.txt” 或者是r"e:\a.txt"
2、如果读取utf-8的模式下,有utff类的字样,需要安装一个Notepad++,打开文件,将编码格式转换 为:utf-8无Bom格式
问题1:当我不知道该文件的编码是什么编码时,比方用mac本打开,则怎么判断???
>>> fp=open("e:\\a.txt","rb")
>>> content=fp.read()
>>> type(content)
<class 'bytes'>
>>> import chardet
>>> chardet.detect(content)
{'encoding': 'UTF-8-SIG', 'confidence': 1.0, 'language': ''}
>>>
问题2:当读取文件时,最终是用什么格式来读取的呢???
>>> fp=open("e:\\a.txt",encoding="utf-8")
>>> content=fp.read()
>>> type(content)
<class 'str'>
>>>
这是因为:bytes类型只用在内存中或者文件存储的时候,当读取文件时,就自动转换为str类型了。
1.4、文件操作模式
- r: 只读模式,并将文件指针指向文件头, 如果文件不存在,则会报错。
- w:只写模式,将文件指针指向文件头,如果文件存在则将内容清空,如果文件不存在,则
创建
- a:只以追加可写的模式打开文件,并将文件指针指向文件的尾端;如果文件不存在则创建
- r+:在r的基础上增加了可写功能,会覆盖当前文件指针所在的位置的字符。文件的指针放在
文件的开头
- w+:在w的基础上增加可读功能。在打开文件的时候,就先将文件内容清空 ,如果该文件不
存在,则创建新文件
- a+:在a的基础上增加了可读功能。只能写在文件末尾,文件打开时,是一个追加模式,如
果该文件不存在,则创建新文件用于读写。
- b:读写二进制数,需要配合使用&