天天看点

python(文件操作)

一、文件操作

1.tell()方法返回文件的当前位置,即文件指针当前位置。

  • UTF-8 编码格式,一个中文占3个字符
  • GBK 编码格式,一个中文占2个字符
#写入前文件内容如下
"""
秦时明月汉时关
万里长征人未还
但使龙城飞将在
不教胡马度阴山
"""

f = open("music","r",encoding="utf8")
print(f.tell())
print(f.read(5))
print(f.tell())
f.close()

#打印出结果如下
"""
0                #初始指针在文件头,也就是位置为0的位置上
秦时明月汉        #打印出5个汉字
15               #此时指针位置在15
"""      

2.seek()指针从哪里开始写入

file.seek(offset[, whence])      
  • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
    • 一个中文占 3 个字节,一个英文字母占 1 个字节
  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
#seek() 参数 whence 默认为 0
f = open("music","r",encoding="utf8")
print(f.read(5))
f.seek(3)
print(f.read(2))
f.close()

#结果如下
"""
秦时明月汉
时明
"""      
#seek() 参数 whence 为 1
#文件内容如下
"""
秦时明月汉时关
"""

f = open("music","rb")        #读取模式需为 "rb"
print(f.read(3).decode("utf8"))        #读取出的内容解码为 utf8
f.seek(3,1)
print(f.read(3).decode("utf8"))
f.close()

#结果如下
"""
秦
明
"""      
#seek() 参数 whence 为 2
#文件内容如下
"""
秦时明月汉时关
"""

f = open("music","rb")      #读取模式需为 "rb"
print(f.read(3).decode("utf8"))     #打印出的结果为汉字需要解码为 utf8
f.seek(-9,2)        #指针改成倒数第三个汉字前进行读取
print(f.read(6).decode("utf8"))     #从指针位置向后读取两个汉字
f.close()

#结果如下
"""
秦
汉时
"""      
with open("data.txt", "r+", encoding="utf8")as f:
    f.seek(5, 0)
    f.write("ccccc")    # 从文件头部向后便宜 5 个字节,再覆盖写入 "ccccc"      

3.flush()

  • 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
  • 一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
import time
f = open("music","w",encoding="utf8")
f.write("hello world")      #此时写入的内容在(缓冲区)缓存中,并未写入到磁盘中,需要执行后面的 f.close() 才会将内容从缓存中写入到磁盘中
f.flush()       #此操作就是提前将缓冲区内的内容写入到磁盘中

time.sleep(10)
f.close()      
#方案一
import sys,time
for i in range(30): #进度条类型
    sys.stdout.write("*")       #此时写入在缓冲区
    sys.stdout.flush()      #通过 flush() 实时刷新
    time.sleep(0.2)

#方案二
import time
for i in range(30): #进度条类型
    print("*",end="",flush=True)
    time.sleep(0.2)      

4.truncate()

  • 方法用于截断文件并返回截断的字节长度。
  • 指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。
#文件内容如下
"""
秦时明月汉时关
万里长征人未还
但使龙城飞将在
不教胡马度阴山
"""

#truncate()参数为空时
f = open("music","r+",encoding="utf8")
f.truncate()
print(f.read())
f.close()

#输出结果如下
"""

"""

#truncate()有参数时
f = open("music","r+",encoding="utf8")
f.truncate(15)
print(f.read())
f.close()

#输出结果如下
"""
秦时明月汉
"""      

作者:多测师高级讲师_郑sir

微信:ZhengYing8887

出处:https://www.cnblogs.com/ZhengYing0813/

备注:本文版权归作者所有,欢迎转载和添加作者微信探讨技术,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。

继续阅读