【Python | 文件基本操作】


一、文件基本操作

1. 打开文件

  1. 打开文件(Windows上打开文件,文件编码默认是gbk,linux默认是utf-8)

注意:使用正确的打开编码方式,否则可能乱码或者报错

  • open(‘文件路径’, ‘打开方式’, encoding=‘编码方式’)
fp = open('today.txt', 'r+', encoding='utf-8')
  1. 最后记得要关闭文件
  • fp.close()

常见编码

img

2. 读取文件

认识r, w, x, a打开方式

img

  • w+每次写入都会覆盖文件原来的内容
  • a+会创建不存在的文件,不会覆盖文件内容 => 追加内容

3. 关闭文件-用with语句打开

  • with语句会自动帮助我们关闭文件 => 当退出with语句块时
    查看光标:
with open('today1.txt', 'r+')as fp1:
    # 光标位置
    print("当前位置", fp1.tell())
    fp1.readlines()
    print("当前位置", fp1.tell())
    fp1.write("你好呀")
    print("当前位置", fp1.tell())
    # 移动光标(从开头位置向右移10)
    fp1.seek(10,0)
    print("当前位置", fp1.tell())

当前位置 0
当前位置 194
当前位置 200
当前位置 10

读取文件内容

img

  • f.seek*(cookie, whence), cookie 是偏移量,whence是相对位置

    • whence:0是开始位置;1是当前位置;2是末尾位置
      • 1,2位置只能用b模式打开才可以
  • f.readlines => 读取文件所有内容,返回的是列表

  • f.read()和f.readline()返回的都是字符串


准备一个example.txt文件,里面随便写入写内容(如一首歌词)

with open("example.txt", "w+", encoding='utf-8') as fp:
    fp.write("窗外的麻雀在电线杆上多嘴\n"
             "#你说这一句很有夏天的感觉\n"
             "手中的铅笔在纸上来来回回\n"
             "我用几行字形容你是我的谁\n"
             "#秋刀鱼的滋味猫跟你都想了解\n"
             "初恋的香味就这样被我们寻回\n"
             "#那温暖的阳光像刚摘的新鲜草莓")

img

读取文件内容前5行及读取全文:

with open("example.txt", "r+", encoding='utf-8') as fp:
    # 读取前五行
    for line in range(5):
        print(fp.readline().strip("\n"))
    # 读取全文
    print("===========")
    fp.seek(0, 0)
    print(fp.read().strip("\n"))

img


读取最后10字节 => 使用b模式打开:

with open('example.txt', 'rb')as fp2:
    fp2.seek(-10, 2)
    print("读取最后10字节")
    print(fp2.read())

img


读取最后12个字节 => str格式

with open('example.txt', 'rb')as fp2:
    fp2.seek(-12, 2)
    print("读取最后12字节")
    print(fp2.read().decode("utf-8"))

img


读取文件,显示除了以井号(#)开头的行以外的所有行

with open("example.txt", "r+", encoding='utf-8') as fp:
    t = fp.readlines()
    fp.seek(0)
    length = len(t)
    for i in range(0, length):
        line = fp.readline()
        if line[0] == "#":
            continue
        else:
            print(line.strip("\n"))

img


4. 写文件

  • f.write(‘something’)
  • 为什么不是实时写入磁盘
    硬盘是慢设备,频率读写会增大磁盘压力,产生瓶颈

思考:什么时候会写入磁盘?即怎么触发写入磁盘

  • f.flush()
  • f.close()
  • buffer设置(默认:io.DEFAULT_BUFFER_SIZE)
    • 0 => 实时写入(binary mode)
      • 只限二进制文件
    • 1 => 行缓存 (text mode) => \n
      • 行缓存中遇到\n会自动触发写入
    • 其他数字n => 缓冲区大小n:2*4096 ,满了之后就挤进磁盘了

光标

  • 当写文件时,注意当前光标的位置(a模式除外)

光标位置

  • f.tell()

移动光标

  • f.seek(移动数字,开始位置)

开始位置为0 => 光标在文件内容开头位置,移动数字只能大于等于0

开始位置为1 => 光标在当前位置

开始位置为2 => 光标在文件内容末尾位置


总结

了解文件的基本操作,本文主要介绍了python里文件的打开、读取、写。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值