在计算机中,文件是以二进制的方式保存在磁盘上的文本文件和二进制文件
文本文件可以使用文本编辑软件查看本质上还是二进制文件
二进制文件保存的内容不是给人直接阅读的,而是提供给其她软件使用的二进制文件不能使用文件编辑软件查看
文件基本 *** 作
在计算机中要 *** 作文件一共包含三个步骤:1.打开文件2.读、写文件
读 将文件内容读入内容写 将内存内容写入文件
模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(不推荐)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
文件打开模式有很多,但是我们实际用到的就只有六种。
我们总结一下主要用到的是下面六种
模式可做 *** 作若文件不存在是否覆盖文件原来内容
r只读报错——
r+可读、可写报错是
w只写创建是
w+可读、可写创建是
a只写创建否,追加写
a+可读、可写创建否,追加写
只读模式打开文件——只读(r)
文件若不存在报错:
读写模式打开文件——读写模式(r+)
数据写入之前:
数据写入之后:
会替换掉相同长度的内容
文件若不存在报错:
写模式打开文件——写模式(w)
数据写入之前:
数据写入之后:
这种 *** 作会删除原来的文件内容,重新写入Python,
并且把光标放在文件最开始。
若文件不存在,系统会创建该文件夹并重新写入内容
读写模式打开文件——读写模式(w+)
数据写入之前:
数据写入之后:
这种 *** 作会删除原来的文件内容,重新写入Python,
并且把光标放在文件最开始。
若文件不存在,系统会创建该文件夹并重新写入内容
利用这个原理所以文件写模式(w)、读写模式(w+)还可以用作删除文件内容。
因为他们整个工作原理就是把文件原来的内容删除,然后写入新的内容。
如果我们写入的内容为空,那么不就是删除文件内容。
数据写入之前:
数据写入之后:
写模式打开文件(追加内容)——写模式(a)
数据写入之前:
数据写入之后:
可以看到是在原先内容的基础上在文末追加新的内容!
若文件不存在,系统会创建新的文件夹并写入内容
读写模式打开文件(追加内容)——读写模式(a)
数据写入之前:
数据写入之后:
可以看到是在原先内容的基础上在文末追加新的内容!
若文件不存在,系统会创建新的文件夹并写入内容
二进制模式打开文件
我们看到了在文件打开模式中有以下模式:rb、wb……有这种带 b 的。
什么意思呢?
就是用二进制的方式打开文件。
很明显,我们出现了以下错误:
主要原因是因为编码的问题,可能是因为0x82这个字节在gbk编码中没有这个字符,
可能原字符是两个字节,在gbk里被解析成了一个字节,导致字符不存在。
这就是我们文件打开方式需要使用二进制读取的原因。
文件 *** 作
open 函数负责打开文件,并且返回文件对象
read /write / close 三个方法都需要通过文件对象 来调用
文件和文件夹的 *** 作
在Python中⽂件和⽂件夹的 *** 作要借助os模块⾥⾯的相关功能,
具体步骤如下:
导⼊os模块
使⽤ os 模块相关功能
1、文件重命名
2、删除文件
3、创建文件夹
4、删除文件夹
5、获取当前目录
6、改变默认目录
7、获取目录列表
open(filename[,mode,encoding="编码"]) :第一个参数文件名如果不加路径,默认在该py文件目录下(路径举例: E:/XXX或E:\\xxx ),第二个是模式,默认为 'r' ——只读,举例: f = open('E:/abc.txt') ,如果要转编码并写入模式:
f = open('E:/abc.txt','w',encoding='utf-8')
1. 模式
2. 方法
(1) close() : 关闭文件,因为文件写入时是写在内存,只有关闭时才写入硬盘,所以写完记得关闭
(2) read(size = -1) :读取文件size个字符,不写默认是-1,此时读取所有内容(换行按\n来表示,很不好看),并作为字符串返回,一定要注意 读完以后文件指针将会指向末尾 ,所以下一次在用read方法时会发现读取不出内容了,所以这个就要用seek移动指针或者关闭文件重新定义
(3) tell() :返回当前文件指针指向的位置
(4) seek(offset,from) :移动文件指针,代表从from参数开始偏移offset个字节,0代表起始位置,1代表当前位置,2代表文件末尾
(5) readline() :按序列读取一行内容,默认\n为边界
(6) write() :写入内容,但必须要有写入权限才行,否则报错,写完会返回写入的长度,例如: len1 = f.write('abc') ,此时len1就为3
(7) truncate() :删除内容,把当前指针以后的内容全删了,举例:
注:
1.文件还可以转化为 list 之类的,例如: list1 = list(f) ,此时文件内容的按\n被隔开,然后可以用for语句读取文件所有内容,举例:
2.上面输出文件内容方法相对低效,所以一般都直接用for输出整个文件,举例:
通过 fileno 函数,我们可以查看一个文件对应的文件描述符,对应的是程序中打开的文件序号,举例:
可以看出python在启动时会先启动标准流的文件(文件描述符分别为:0/1/2),所以之后打开的文件就从3开始递增,当释放一个文件资源时,该描述符序号被释放,之后打开的文件可以继续使用该序号的文件描述符
python中的 print 的本质是通过 sys.stdout 来进行内容输出,而 sys.stdout 的本质是一个"文件",相当于我们所有的输入输出的本质都是在对 sys.stdin / sys.stdout / sys.stderr 这些文件来进行读写 *** 作,举例:
open 函数不仅可以打开本地文件,也可以打开文件描述符,而该参数默认为 True ,代表 close 后会将对应的文件资源释放,而对于一些文件描述符,我们只是希望 close 时将打开文件描述符的对象释放,而不释放对应的文件资源,那么则可以设置 closefd=False ,举例:
需要使用到 chardet 模块,按二进制可读打开文件,然后通过 detect() 方法查看,举例:
所以就可以根据文件来设置编码了:
有时候使用文件的编码解码也可能会出现无法解析的情况,例如两种编码混在同一个文件里的时候,此时可以设置 errors 参数为 ignore 来避免该问题,示例:
可用 os 模块下的 chmod() 函数,具体参考: http://www.runoob.com/python/os-chmod.html
使用 os 模块下的 remove() 函数可以实现删除文件,举例:
可以使用自带的 zipfile 模块来进行 *** 作,举例:
可以使用自带的 tarfile 模块来进行 *** 作,举例:
https://www.cnblogs.com/lotusto/p/5805543.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)