【python笔记】io编程,文件操作

前言

笔记总结,技术如有错误请指正。

打开文件

打开文件需要使用一个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())

结果:

小明:我是不是很帅
小红:你也罢了?
小明:啧,你就说帅不帅
小红:我看你像个皮蛋
小明:你丫的是真没眼光

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北岭敲键盘的荒漠猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值