Python3.5——文件读与写详解(下)

1、文件读完之后,文件句柄的指针移动到文件的末尾,想从头再读一遍,需要将指针移回到开始位置。

(1)查看文件句柄的指针指向的位置,调用.tell(),已读取的字符的个数即为计数的值(也是文件句柄指针指向的位置)。

f = open("song",'r',encoding="utf-8")
print(f.tell())
print(f.readline().strip())    #读取第一行
print(f.tell())

#运行结果:
#0
#take me to your heart
#23
f = open("song",'r',encoding="utf-8")
print(f.tell())
print(f.read(6))    #读取字符的个数
print(f.tell())

#运行结果:
#0
#take m
#6
(2) 移动文件句柄指针,使其回到某个位置,调用 .seek(指针的位置)

f = open("song",'r',encoding="utf-8")
print(f.tell())
print(f.readline().strip())   #读取第一行内容
print(f.tell())               #打印文件句柄指针的位置
f.seek(0)                     #文件句柄指针回到起始位置
print(f.tell())
f.seek(30)                    #文件句柄指针回到第30个字符的位置
print(f.readline().strip())   #从第30个字符开始读一行内容
print(f.tell())               #打印读取之后指针的位置

#运行结果:
#0
#take me to your heart
#23
#0
#from the rain and snow
#54
2、 打印文件的编码类型——调用: 句柄.encoding()
f = open("song",'r',encoding="utf-8")
print(f.encoding)             #打印文件的编码类型

#运行结果:
#utf-8
3、打印 文件的名字——调用: 句柄.name
f = open("song",'r',encoding="utf-8")
print(f.name)             #打印文件名字

#运行结果:
#song

4、判断 文件是否可读——调用: 句柄.readable()

    判断文件是否可写——调用:句柄.writable()

   判断文件是否已经关闭——调用:句柄.closed()

    判断文件句柄指针是否可移动——调用:句柄.seekable()tty文件和终端设备文件的句柄指针不能移动

f = open("song",'r',encoding="utf-8")
print(f.readable())    #判断文件是否可读
print(f.seekable())    #判断文件句柄指针是否可移动
print(f.writable())    #判断文件是否可写

#运行结果:
#True
#True
#False
5、以写的模式打开一个文件,刚写完一行,突然断电,写的内容就没有写入硬盘当中,而是在内存的缓存中(硬盘的速度比内存慢)。
原本等到写入的内容在内存的缓存中满了,再一起写入硬盘中,调用句柄 .flush()表示 强制刷新到硬盘里面。

举例:动态打印字符:每隔0.1秒在屏幕输出打印一个#,一个打印20个

import sys,time

for i in range(20):
    sys.stdout.write("#")   #向屏幕标准输出写入的字符
    sys.stdout.flush()      #强制刷新
    time.sleep(0.1)         #休眠时间

#运行结果
####################
6、截断文件里面的内容——调用: 句柄.truncate()   没有写参数,不做任何操作

调用:句柄.truncate(10)    参数10,代表从文件开头,截断10个字符

f = open("song",'a',encoding="utf-8")
f.truncate(20)             #从起始位置截断20个字符

7、"+" 表示可以同时读写某个文件

(1)r+   读写模式,注:写的内容从文件的最后面开始写入(写等同于追加),即:【可读;可写;可追加】

f = open("song",'r+',encoding="utf-8")    #r+表示读写模式
for line in range(3):
    print(f.readline().strip())
f.write("-----------")
运行结果:



(2)w+   写读模式(应用不多):先创建一个文件然后再向里面写内容,注:写的内容从文件的最后面开始写入(写等同于追加)

f = open("song",'w+',encoding="utf-8")
f.write("-----------\n")
f.write("-----------\n")
f.write("-----------\n")

print(f.readline())
f.seek(14)
f.write("==========")
print(f.readline())
f.close()
运行结果:

(3).a+   追加读模式

8、"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

应用:在网络传输只能用二进制模式进行传输;所有的二进制文件(如:视频)用二进制模式。

(1)二进制文件——读

f = open("song",'rb')    #"b"表示处理二进制文件
for line in range(3):
    print(f.readline())
运行结果:

(2)二进制文件——写

f = open("song",'wb')    #"b"表示处理二进制文件--写
f.write("Hello World\n".encode())    #需要将字符串编码成字节包(二进制格式)才能够写入
f.close()
运行结果:


9、"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
(1)rU
(2)r+U

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值