首页 > 编程语言 >python3-基础篇-11-文件操作

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

时间:2022-11-20 21:32:13浏览次数:72  
标签:11 文件 encoding file print txt open python3

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-文件操作_python_04

4.其它

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

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

运行结果

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

三、文件操作-具体方法

创建文件《采莲曲.txt》

python3-基础篇-11-文件操作_python_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模式,光标移动至末尾,然后进行读、写的操作。

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

标签:11,文件,encoding,file,print,txt,open,python3
From: https://blog.51cto.com/lvyq/5872054

相关文章

  • 寻找目标文件
    #pragmawarning(disable:4996)#include<stdio.h>intmain(){intys[]={1,2,3,4,5,6,7,8,9,10};intn=0;//n是想查找的数字inti......
  • 11月第3次周末总结
    11月第3次周末总结软件开发架构C\S架构client客户端server服务端优点客户端可以高度定制化功能缺点:需要下载B\S架构browser客户端server服务端优点:不需要下......
  • golang接收文件脚本
    golang接收文件脚本packagemainimport("io""os""fmt""io/ioutil""net/http")//https://www.jianshu.com/p/b49cc19d26f0参考资料......
  • [leetcode每日一题]11.20
    ​​799.香槟塔​​我们把玻璃杯摆成金字塔的形状,其中 第一层 有 ​​1​​ 个玻璃杯, 第二层 有 ​​2​​ 个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟......
  • XML文件的写入和读取(解析)基于DOM4J工具
    这两天做了个天气的小应用,需要用到百度的天气api,获取到的信息是一个xml文档。所以就从网上查了一下相关的知识,就是关于怎么去解析出来xml文件的信息。先放一个我自己写的例......
  • 八、文件操作
    八、文件操作8.1、编码ASCII表众所周知,计算机起源于美国,英文只有26个字符,算上其他所有特殊符号也不会超过128个。字节是计算机的基本储存单位,一个字节(bytes)包括八......
  • 11.20.2
    #include<stdio.h>intf(intx);intmain(){ intx; scanf("%d",&x); printf("%d",f(x));     return0;}intf(intx){inti,sum=10; if(x>1){ for(i=......
  • windows server2016安装oracle 11g的图文教程
    Windows Server是微软面向服务器的操作系统,服务器操作系统和客户端操作系统是不一样的,下面这篇文章主要给大家介绍了关于windows server2016安装oracle 11g的相关资料......
  • 11月20周报
    11月20周报软件开发架构#1.软件开发架构的目的 程序员在编写软件的时候应该遵循的架构设计——三层架构#2.软件开发架构的分类 C/S架构C:client(客户端) S:s......
  • 黄金波浪221120
    黄金反弹暂时结束。回调的第一条腿可能走完了,下周初如果不破1747则开始小幅度反弹。阻力17556072下周交易计划也是考虑1772空。1722附近是下周重要支撑!1722可以计划......