python中多file的操作:
1使用open() 方法用于打开一个文件,并返回文件对象(打开文件,得到文件句柄并赋值给一个变量)
2.通过文件对象对文件进行一系列操作(通过句柄对文件进行操作)
3.关闭文件对象,即调用 close() 方法。(虽然系统默认也会调用close,但仍建议使用close主动关闭)
一、open() 方法说明:
open
(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:(详情查看Python中文官网)
file | 表示将要打开的文件的路径(绝对路径或者当前工作目录的相对路径),也可以是要被封装的整数类型文件描述符。 |
mode | mode 是一个可选字符串,用于指定打开文件的模式。默认值是 |
buffering | buffering 是一个可选的整数,用于设置缓冲策略 |
encoding | 编码,一般使用utf8 |
errors | 报错级别 |
newline | 区分换行符 |
closefd | 传入的file参数类型 |
在pycham中将光标放在open()方法,也可以看出方法的相关说明
编辑
model模式
| 读取(默认)(打开并读取文本,同 |
| 写入,并先截断文件 |
| 排它性创建,如果文件已存在则失败 |
| 写入,如果文件存在则在末尾追加 |
| 二进制模式 |
| 文本模式(默认) |
| 更新磁盘文件(读取并写入) |
二、文件操作-模式介绍
1.r模式0(只读)
创建文件 file1.txt,内容为【open r 模式测试】
执行
_file=open('file1.txt') #1打开文件,等到文件句柄并赋值给变量_file
data = _file.read() #2通过句柄对文件进行read()操作
_file.close() #3.关闭文件
print(data)
运行结果
open r 妯″紡娴嬭瘯
发现虽然被读出来了,但是乱码了,这是因为open()没有指定编码时,使用的是默认编码(默认编码是依赖于平台的)指定编码为utf-8即可
执行
结果为
cp936
cp936即GBK
指定编码重新执行
运行结果
open r 模式测试
op
2.w模式(只写)
1.当文件不存在时,会创建文件
2.每次操作都会格式化文件(清空文件内容),然后重新写入
_file = open('file2.txt','w',encoding='utf-8')
_file.write(' open w 模式测试')
_file.close()
运行结果
3.a模式(追加) 【以下对上面的file2.txt文件操作】
1.文件不存在时将会创建文件
2.在原有文件后面追加内容(不会格式化文件)
运行结果
4.其它
只读(写)模式下不能对文件进行写(读)的操作
_file=open('file1.txt','r',encoding='utf-8')
_file.write('wirte')
_file.close()
运行结果
三、文件操作-具体方法
创建文件《采莲曲.txt》
编辑
方法 | 说明 | 示例 | 结果 |
readline() | 读取某文件某一行内容(默认从文件第一行开始读) | _file = open('采莲曲.txt','r',encoding='utf-8') | (产生这样的结果是因为,当第一次使用readline()方法时,光标移动到了第一行的最后位置,第二次调用时,从当前光标位置开始往后读取数据) |
readlines() | 读取文件全全部行的内容,并以集合的形式返回(针对大文件时不适用,可能会造成内存溢出) | _file = open('采莲曲.txt','r',encoding='utf-8') | |
1.for i in _file 2.for i in _file.readlines() | for循环取出文件内容推荐使用第一种(第二种占用内存,第一种是for内部将_file对象做成了迭代器内容在磁盘中而不是在内存中) | _file = open('采莲曲.txt','r',encoding='utf-8') | |
tell() | 获取当前光标在文件中的位置(默认0即首位) 【tell()在python3中一个中文为三个字符,英文为一个字符,在python2中无论中文还是英文都是1个字符】 | _file = open('采莲曲.txt','r',encoding='utf-8') | |
seek(num) | 移动光标在文件中的位置(断点续传) | _file = open('采莲曲.txt','r',encoding='utf-8') | |
flush() | 将缓存中的数据写入到磁盘中,并清空缓存 | 在写的过程中使用此方法,可以实时的更新到磁盘中 |
三、with
1.除了使用open打开文件之外还可以用with操作文件,当with代码块执行完毕时,会自动关闭并释放资源
2.在python3中 with支持同时对多个文件操作
with open('采莲曲.txt','r',encoding='utf-8') as _file:with open('采莲曲.txt','r',encoding='utf-8') as _file_read,open('采莲曲1.txt','w') as _file_write:
示例:
with open('采莲曲.txt','r',encoding='utf-8') as _file:
data =_file.read()
print(data)
执行结果
编辑
四、其它模式
除了上面演示到的rwa模式外,还有r+,w+,a+模式,以下以采莲曲为例
模式 | 说明 | 示例 | 控制台输出 | 文件输出 |
r+ | 读写操作,既可以读也可以写 | with open('采莲曲.txt','r+',encoding='utf-8') as _file: | 发现写入的数据加在了末尾,这是因为数据添加是根据当前光标在文件中的位置往后操作的(上面读取文件后光标移动到了最后面) | |
w+ | with open('采莲曲.txt','w+',encoding='utf-8') as _file: | 由控制台看出来两次读都没有读到数据,这是因为会先执行w模式,会清空数据。第一次读取不到数据,写入数据化光标移动只末尾,故第二次也没有读到数据 | ||
a+ | with open('采莲曲.txt','a+',encoding='utf-8') as _file: | 控制台结果与w+模式一致,也是因为先执行a模式,光标移动至末尾,然后进行读、写的操作。 |
注:文件的操作与光标位置密不可分
标签:11,文件,encoding,file,print,txt,open,python3 From: https://blog.51cto.com/lvyq/5872054