0
点赞
收藏
分享

微信扫一扫

python3-基础篇-11-文件操作

python中多file的操作:

1使用open() 方法用于打开一个文件,并返回文件对象(打开文件,得到文件句柄并赋值给一个变量)

2.通过文件对象对文件进行一系列操作(通过句柄对文件进行操作)

3.关闭文件对象,即调用 close() 方法。(虽然系统默认也会调用close,但仍建议使用close主动关闭)

一、open() 方法说明:

​open​​(filemode='r'buffering=-1encoding=Noneerrors=Nonenewline=Noneclosefd=Trueopener=None)

参数说明:(详情查看​​Python中文官网​​)

file

表示将要打开的文件的路径(绝对路径或者当前工作目录的相对路径),也可以是要被封装的整数类型文件描述符。

mode

mode 是一个可选字符串,用于指定打开文件的模式。默认值是 ​​'r'​​ 

buffering

buffering 是一个可选的整数,用于设置缓冲策略

encoding

编码,一般使用utf8

errors

报错级别

newline

区分换行符

closefd

 传入的file参数类型

在pycham中将光标放在open()方法,也可以看出方法的相关说明

python3-基础篇-11-文件操作_读取文件

编辑

model模式

​'r'​

读取(默认)(打开并读取文本,同 ​​'rt'​​ )

​'w'​

写入,并先截断文件

​'x'​

排它性创建,如果文件已存在则失败

​'a'​

写入,如果文件存在则在末尾追加

​'b'​

二进制模式

​'t'​

文本模式(默认)

​'+'​

更新磁盘文件(读取并写入)

二、文件操作-模式介绍

1.r模式0(只读)

创建文件 file1.txt,内容为【open r 模式测试

python3-基础篇-11-文件操作_数据_02

 执行

_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()

运行结果

python3-基础篇-11-文件操作_读取文件_03

3.a模式(追加) 【以下对上面的file2.txt文件操作】

1.文件不存在时将会创建文件

2.在原有文件后面追加内容(不会格式化文件)

运行结果

python3-基础篇-11-文件操作_读取文件_04

4.其它

只读(写)模式下不能对文件进行写(读)的操作

_file=open('file1.txt','r',encoding='utf-8')
_file.write('wirte')
_file.close()

运行结果

python3-基础篇-11-文件操作_读取文件_05

三、文件操作-具体方法

创建文件《采莲曲.txt》

python3-基础篇-11-文件操作_数据_06

编辑

方法

说明

示例

结果

readline()

读取某文件某一行内容(默认从文件第一行开始读)


_file = open('采莲曲.txt','r',encoding='utf-8')
data1 = _file.readline()
data2 = _file.readline()
_file.close()
print(data1)
print(data2)




(产生这样的结果是因为,当第一次使用readline()方法时,光标移动到了第一行的最后位置,第二次调用时,从当前光标位置开始往后读取数据

readlines()

读取文件全全部行的内容,并以集合的形式返回(针对大文件时不适用,可能会造成内存溢出)


_file = open('采莲曲.txt','r',encoding='utf-8')
data = _file.readlines()
_file.close()
print(data)





1.for i in _file

2.for i in _file.readlines()

 for循环取出文件内容推荐使用第一种(第二种占用内存,第一种是for内部将_file对象做成了迭代器内容在磁盘中而不是在内存中)


_file = open('采莲曲.txt','r',encoding='utf-8')
#不推荐
# for i in _file.readline():
# print(i.strip())

#推荐使用
for i in _file:
print(i.strip())




tell()

获取当前光标在文件中的位置(默认0即首位)

tell()在python3中一个中文为三个字符,英文为一个字符,在python2中无论中文还是英文都是1个字符


_file = open('采莲曲.txt','r',encoding='utf-8')
print(_file.tell())
print(_file.read(3)) #读取三个字符(之前示例提到read时不管中文还是英文,一个字符就是一个字符)
print(_file.tell())


seek(num)

移动光标在文件中的位置(断点续传


_file = open('采莲曲.txt','r',encoding='utf-8')
print('初始光标位置:',_file.tell())
print('读取三个字符:',_file.read(3))
print('读取三个字符位置:',_file.tell())
_file.seek(0) #移动光标位置到0
print('移动光标位置到0后读取三个字符:',_file.read(3))



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)

执行结果

python3-基础篇-11-文件操作_python_07

编辑

四、其它模式

除了上面演示到的rwa模式外,还有r+,w+,a+模式,以下以采莲曲为例

模式

说明

示例

控制台输出

文件输出

r+

读写操作,既可以读也可以写


with open('采莲曲.txt','r+',encoding='utf-8') as _file:
print(_file.read())
print(_file.write('r+ test'))



发现写入的数据加在了末尾,这是因为数据添加是根据当前光标在文件中的位置往后操作的(上面读取文件后光标移动到了最后面)

w+


with open('采莲曲.txt','w+',encoding='utf-8') as _file:
print('读取文件内容1:',_file.read())
print(_file.write('w+ test'))
print('读取文件内容2:',_file.read())

由控制台看出来两次读都没有读到数据,这是因为会先执行w模式,会清空数据。第一次读取不到数据,写入数据化光标移动只末尾,故第二次也没有读到数据

a+


with open('采莲曲.txt','a+',encoding='utf-8') as _file:
print('读取文件内容1:',_file.read())
print(_file.write('a+ test'))
print('读取文件内容2:',_file.read())




控制台结果与w+模式一致,也是因为先执行a模式,光标移动至末尾,然后进行读、写的操作。

注:文件的操作与光标位置密不可分

举报

相关推荐

0 条评论