Python文件操作
<p>文件操作</p>
<p>1、创建\打开文件</p>
<pre><code>(1)格式:
file = open(filename[,mode[,buffering]])
参数说明:
file:被创建的文件对象。
filename:
1、要创建或打开文件的文件名称,需要使用引号括起来。
2、如果要打开的文件和当前文件在同一个目录下,那么直接写文件名即可,否则指定完整路径。
mode:可选参数,用于指定文件的打开模式。
buffering:可选参数,用于指定读写文件的缓存模式,值为0表示不缓存;为1表示缓存;如果大于1则表示缓存区的大小;默认为缓存模式。
文件打开模式(mode参数值说明):
使用“r/rb//w/wb/+”操作文件时,
若文件不存在,会在指定路径下创建对应文件名的文件;
若存在,则会对已存在的文件进行覆盖(并将原文件内容清空);
使用“a//ab”操作文件时,
若文件不存在,会创建新文件用于写入;
若文存在,则会将新的内容追加至文件末尾;
(2)r:read; w:write; a:append
r
以只读的方式打开文件,指针会定位到文档的开头;
r+
以读写的方式打开文件,指针会定位到文档的开头;
rb
以二进制的方式+只读的方式打开一个文件,指针会定位到文档的开头(一般用于非文本文件:图片、声音等);
rb+
以二进制的方式+读写的方式打开一个文件,指针会定位到文档的开头(一般用于非文本文件:图片、声音等);
w
以只写的方式打开文件,指针会定位到文档的开头;
w+
以读写的方式打开文件,指针会定位到文档的开头;
wb
以二进制的方式+只写的方式打开一个文件(一般用于非文本文件:图片、声音等);
wb+
以二进制的方式+读写的方式打开一个文件(一般用于非文本文件:图片、声音等);
a
以追加的方式打开文件,如果文件已经存在,则将新的内容追加至文件末尾;如果不存在,则创建新文件用于写入;
a+
以读写的方式打开文件,如果文件已经存在,则将新的内容追加至文件末尾;如果不存在,则创建新文件用于读写;
ab
以二进制+追加的方式打开文件,如果文件已经存在,则将新的内容追加至文件末尾;如果不存在,则创建新文件用于写入;
ab
以二进制+追加的方式打开文件,如果文件已经存在,则将新的内容追加至文件末尾;如果不存在,则创建新文件用于读写;
(3)w与a的区别
w每次都会清空,a每次都会追加。
(4)以二进制的形式打开文件
file = open('E:\001test\am.png','rb')
print(file)
(5)打开文件时指定编码格式
说明:使用open()打开文件时,默认采用GBK编码,当被打开的文件不是GBK编码时,会抛出异常。
方案:
1、直接修改文件的编码
2、在打开文件时,直接指定使用编码方式,推荐这种方式
在调用open()函数时,通过添加encoding='utf-8'参数即可将编码指定为UTF-8;如果想指定其他编码,可以将单引号中的内容替换成想要指定的编码。
案例:
打开采用UTF-8编码保存的notice.txt文件,代码如下:
file = open('notice.txt','r',encoding='utf-8')
说明
默认情况下,用open()函数打开一个不存在的文件,会抛出异常。
解决办法:
1、在当前目录(与执行文件相同的目录)下创建一个文件。
2、在调用open()函数时,指定mode的参数为w、w+、a、a+...这样,当文件不存在时就会创建一个新的文件。</code></pre>
<p>2、打开文件时使用with语句</p>
<pre><code>(1)说明
1、如果在打开文件时抛出了异常,那么将导致文件不能被及时关闭。
2、使用python提供的with语句,从而实现在处理文件时无论是否抛出异常,都能保证with语句执行完毕后关闭已经打开的文件。
(2)格式
with expression as target:
with-body
参数说明:
expression:用于指定一个表达式,可以是打开文件的open()函数
target:用于指定一个变量,并且将expression的结构保存到该变量中
with-body:用于指定with语句体,其中可以是执行with语句后相关的一些操作语句。可以直接用pass代替。
(3)案例
在打开文件时,使用with语句,代码如下:
print("\n","="*10,"蚂蚁庄园动态","="*10)
with open('lukeru.txt','w') as file: #创建或打开保存蚂蚁庄园动态信息的文件
pass
print("\n 即将显示......\n")</code></pre>
<p>3、关闭文件</p>
<pre><code>(1)说明
1、打开文件后,需要及时关闭文件,以避免对文件造成不必要的破坏。
2、close()方法先刷新缓冲区中还没有写入的信息,再关闭文件。这样可以将没有写入的文件的内容写入文件。
3、在关闭之后,便不能再进行写入操作了。
4、关闭文件对象file,并将属性file.close设置为True,即文件已关闭,则返回True;
(2)格式
file.close()
参数说明:
file:要关闭的文件对象</code></pre>
<p>4、读取文件</p>
<pre><code>(1)读取指定字符
read()函数
格式
file.read([size])
参数说明:
file:要打开的文件对象
size:可选参数,用于指定读取的字符个数,如果省略,则一次性读取所有内容。
file.readable()
说明
如果f已经打开等待读取,则返回True;
file.readinto(ba)
说明
将至多len(ba)个字节读入到bytearray ba中,并返回读入字节数,如果在文件结尾,就为0;
说明
1、在调用read()函数读取文件内容的前提是,在打开文件时,指定打开模式为r(只读)或r+(读写),否则抛出异常。
2、read([size])是从文件的开头开始读取字符的,如果向读取部分内容,可以使用seek()函数。
案例
with open('lukeru.txt','r') as file:#打开文件
string=file.read(3)#读取前10个字符
print(string)
seek()函数
格式
file.seek(offset[,whence])
参数说明:
file:表示已经打开的文件对象
offset:用于指定移动的字符个数,其具体位置与whence有关。
whence:用于指定从什么位置开始计算。值0表示从文件开头开始计算,1表示从当前位置开始计算,2表示从文件末尾开始计算。默认是0。
1、对于whence参数,如果在打开文件时,没有使用b模式(rb),那么只允许从文件开头开始计算相对位置,从文件末尾计算时就会抛出异常。
file.seekable()
说明
如果f支持随机存取,就返回True;
案例
想要从文件的第19个字符开始读取13个字符,代码如下:
with open('lukeru.txt','r') as file:#打开文件
file.seek(19)#移动文件指针到新的位置
string=file.read(13)#读取13个字符
print(string)
说明
在使用seek()函数时,offset的值是按一个汉字占2个字符,一个英文字母和数字占1个字符计算的,这与read([size])函数不同。
(2)读取一行
格式
file.readline()
参数说明:
file:打开的文件对象,同read()方法一样,也需要指定打开模式为r(只读)或r+(读写)
(3)读取全部
格式
file.readlines()
参数说明:
file:打开的文件对象,同read()方法一样,也需要指定打开模式为r(只读)或r+(读写)</code></pre>
<p>5、写入文件</p>
<pre><code>说明
1、调用write()函数向文件写入内容的前提是在打开文件时,指定的打开模式为w(可写)或a(追加),否则会抛出异常。
格式
file.write(string)
参数说明:
file:要打开的文件对象
string:要写入的字符串
file.writable()
说明
如果f是为写操作而打开的,就返回True;
file.writelines(seq)
说明
将对象序列写入到文件;</code></pre>
<p>6、清空文件</p>
<pre><code>格式
file.flush()</code></pre>
<p>7、写入和读取文件常用方法</p>
<pre><code>file.encoding
说明:yte与str之间进行转换时使用的编码;
file.fileno()
说明:回底层文件的文件描述符;
file.isatty()
说明:文件对象与控制台关联,就返回True;
file.mode
说明:件对象打开时使用的模式;
file.name
说明:件对象f的文件名(如果有);
file.newlines
说明:本文件f中的换行字符串的类型;
file.__next__()
说明:回文件对象f的下一行;
file.peek(n)
说明:回n个字节,而不移动文件指针的位置;
file.tell()
说明:回当前指针位置;
file.truncate(size)
说明:取文件到当前文件指针所在位置,如果给定size,就到size大小处;</code></pre>