文件句柄的其他方法、光标操作与文件内容的循环

.closed
查看句柄是否关闭

f = open("a.txt", "w")
print(f.closed)
f.close()
print(f.closed)

.encoding
查看文件句柄的编码方式,即显示使用什么编码打开的而不是原文件是以什么编码储存的

f = open("a.txt", "w", encoding="utf8")
f.write("实验内容")
f.close()
f = open("a.txt", "r", encoding="gb2312")
print(f.encoding)
f.close()

.flush
将内存中的内容刷入硬盘,一般情况下只有在文件关闭时才会将内存中的文件刷入硬盘,.flush语句可以立即将内存中的内容刷入硬盘。

f = open("b.txt", "w", ,encoding= "utf8")
f.write("实验内容21")
f.flush()
f.close()

.name
显示句柄打开的文件的文件名

f = open("b.txt", "w", encoding="latin-1")
print(f.name)
f.close()

文件操作内的光标操作
除 .read(3) 方法表示读取三个字符外,其余文本处理方法光标的移动都是以字节为单位的
tell()
显示光标现在的位置,会以字节为单位来数。

注意在Windows中,回车以\r\n的形式实现,所以tell()语句在Windows系统下在数字节的时候遇到会车会算两个字节,在Linux系统下回车就是以\n实现的。

但在显示的时候Python将自动将\r\n转化为\n,如果想读取真正的换行符则在设置文件句柄时在open函数中设置newline="" 参数。

tell()的演示和newline=""的作用:

f = open("new.txt", "w", encoding="utf-8")
f.write("123456,字\n")
print(f.tell())
f.close()
f1 = open("new.txt", "r", encoding="utf8")
print(f1.readlines())
f1.close()
f2 = open("new.txt", "r", encoding="utf8", newline="")
print(f2.readlines())
f2.close()

.seek()
光标的移动
.seek()方法有三种模式,以第二个参数的0,1,2控制,默认为0模式。.seek(n,0)模式表示绝对位置,表示将光标移动到从头开始的第n个字节, .seek(n,1)模式标识相对位置,表示将光标从现在的位置移动n个字节, .seek(-n,2)模式表示倒叙位置,表示将光标从末尾移动n个字节。
注意在文本文件中,如果没有使用b模式选项打开文件,只允许从文件头开始计算相对位置。

f = open("new1", "wb")
f.write(bytes("中文789a\nde", encoding="utf8"))
f.seek(3)
print(f.tell())
f.seek(6)
print(f.tell())
f.seek(1, 1)
print(f.tell())
f.seek(5, 1)
print(f.tell())
f.seek(-1, 2)
print(f.tell())
f.close()

文件的循环
第一种方式较第二种方式节省内存

#要一行给一行打印一行
f = open("Test1", "r", encoding="utf8")
for i in f:
	print(i)
f.close()
#全部读取后逐行打印
f = open("Test1", "r", encoding="utf8")
for i in f.readlines():
	print(i)
f.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值