前言
笔记总结,技术如有错误请指正。
打开文件
打开文件需要使用一个open()的函数
语法:
open(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True)
常用参数作用:
只有file一个必要的参数,其他的参数基本都是有默认参数。
file:定义要操作文件的相对或者是绝对路径
mode:文件操作的模式
buffering:缓冲区的大小
encoding:文件操作编码,(一般为uft-8)
newline:设置换行符
mode参数
模式 | 描述 |
r | 只读不可写 作者实验:打开后光标在0位置 |
w | 可写不可读,如果存在本文件,会把源文件进行覆盖,如果没有就进行创建 |
x | 可写不可读,如果没有就创建,如果有就报错 |
a | 追加内容 作者实验:打开后光标在最后位置 |
b | 二进制模式 |
t | 文本模式 |
+ | 对文件进行更新(可读可写),跟在其他模式后面, 例:r+,w+,a+.就是变成了可读可写。 作者实验:打开后光标还在原模式对应的位置,所以r+打开后直接写入的话会写到文本最头上 |
作者对打开方式光标方位的实验:
文本内容:
1.我是大帅b
2.我是超级大帅b
3.我是超级无敌大帅b
4.我是宇宙超级最帅的无敌大帅b
python文件内容:
file1=open('file1.txt','r') print(file1.tell())#显示光标位置 file1.close() print('------------------------------------------') file2=open('file1.txt','a') print(file2.tell()) file2.close() print('------------------------------------------') file3=open('file1.txt','r+') print(file3.tell()) file3.close() print('------------------------------------------') file4=open('file1.txt','a+') print(file4.tell()) file4.close()
运行结果:
0
------------------------------------------
80
------------------------------------------
0
------------------------------------------
80
这个光标的问题在文件操作的时候会涉及到。
获取文件属性
属性 | 描述 |
文件变量名.closed | 文件关闭返回对,文件未关闭返回错 |
文件变量名.mode | 返回被打开文件的访问模式 |
文件变量名.name | 返回文件的名称 |
文件操作函数
函数 | 描述 |
close() | 关闭文件 |
fileno() | 获取文件描述符 |
flush() | 强制刷新缓冲区 |
read(数字) | 数据读取,默认全部内容,也可以设置读取个数。 数字如果代表读取几个字符 作者实验: 1.其实准确的说是读取光标以下全部的内容,r模式打开光标在最顶上,所以可以读取全部内容,而a的话在最底下,会出现无法读取的情况。 用过之后光标会在文件末尾,所以再次使用read就会什么也读不出来。 |
readlines() | 读取所有数据行,以列表的形式返回 |
readline(数字) | 读取所有数据行,结尾以\n结尾,数字表示读取几个字符 作者实验: 1.准确的说是读取光标所在行,光标处后面这一行的内容。 同样要是光标在末尾的话啥也读不出来 |
seek() | 移动指针 |
tell() | 返回当前指针在文件中的位置 |
truncate() | 文件截取 |
writeable() | 判断文件是否可以写入 |
write() | 文件写入 |
writelines() | 写入一组数据 |
案例
open与文件属案例演示
代码
#打开文件 a_file=open('D:\\python\\文件操作\\exp','r') #判断文件属性 print('文件是否关闭:{}'.format(a_file.closed)) print('文件的打开模式:{}'.format(a_file.mode)) print('打开文件的路径:{}'.format(a_file.name))
结果
文件是否关闭:False
文件的打开模式:r
打开文件的名字:D:\\python\\文件操作\\exp
文件打开模式的案例
温馨提示:要养成用完文件就关闭的好习惯,这样数据小朋友就不会走丢了。
案例:
原本当前文件夹含有的文件
file1的内容:
main中的代码:
#w打开文件 file1=open(file='D:\\python\\文件操作\\file1.txt',mode='w') file1.write('w模式可以理解为覆盖源文件或者创建新文件。\n该文件已经被w形式覆盖') file1.close() #x打开文件 file2=open(file='D:\\python\\文件操作\\file2.txt',mode='x') file2.write('x模式可以理解为创建文件') file2.close() #a打开文件 #在w覆盖的文件基础上再进行追加内容 file3=open(file='D:\\python\\文件操作\\file1.txt',mode='a') file3.write('a模式已经成功在这里追加了内容') file3.close()
运行之后
注意事项:
1.路径的\要用两个,因为一个会判定为转义
2.可能存在编码问题,我有个文件就无法用pycharm正常打开
文件读取
txt文件内容
小明:我是不是很帅
小红:你也罢了?
小明:啧,你就说帅不帅
小红:我看你像个皮蛋
小明:你丫的是真没眼光
read()读取
源代码:
file=open('file1.txt','r') #r模式打开光标在最顶上 print(file.read()) print('使用完read后光标会在最后的位置,此时是无法读取出任何内容的') print('----------------------------------------------------') print(file.read()) print('绝对什么也没读出来')
得到结果:
小明:我是不是很帅
小红:你也罢了?
小明:啧,你就说帅不帅
小红:我看你像个皮蛋
小明:你丫的是真没眼光使用完read后光标会在最后的位置,此时是无法读取出任何内容的
----------------------------------------------------绝对什么也没读出来
readline()读取
file=open('file1.txt','r') #光标在文件开头 #读取文件所在的一行 print(file.readline()) #读取完毕之后光标会在下一行 print(file.tell()) print('-------------------------------------------------') #改变光标在第一行的位置,体会一下 #这里注意一下一个汉字等于两个字节,所以4相当于是2个汉字或者4个字母 file.seek(4) print(file.readline()) print('-------------------------------------------------') #这里演示一下利用readine每次读取完后光标在下一行来读取第二行内容 file.seek(0) #读取第一行但是不打印 file.readline() #打印第二行 print(file.readline())
输出结果:
小明:我是不是很帅
20
-------------------------------------------------
:我是不是很帅-------------------------------------------------
小红:你也罢了?
所以连用两个read读取不出内容,但是连用两个readine可以读取下一行内容,
如果想读取几行的话可以用for循环。
readlines()读取
源代码:
file=open('file1.txt','r') #光标在文件开头 #读取所有行数据以列表形式返回 print(file.readlines()) print('-----------------------------------') #我们可以尝试一下他列表的特性,来完成一些循环操作 #利用列表特性进行输出全部 file.seek(0) #这里注意一下光标的位置 for b in file.readlines(): print(b) file.close()
输出结果:
['小明:我是不是很帅\n', '小红:你也罢了?\n', '小明:啧,你就说帅不帅\n', '小红:我看你像个皮蛋\n', '小明:你丫的是真没眼光\n']
-----------------------------------
小明:我是不是很帅小红:你也罢了?
小明:啧,你就说帅不帅
小红:我看你像个皮蛋
小明:你丫的是真没眼光
with关键字
作用:在文件使用完毕后自动关闭文件,无需再用close()
案例:
源代码:
with open('file1.txt','r') as file: print(file.read())
结果:
小明:我是不是很帅
小红:你也罢了?
小明:啧,你就说帅不帅
小红:我看你像个皮蛋
小明:你丫的是真没眼光