07_读写文件open(filename, mode, encoding=None)

读写文件open(filename, mode, encoding=None)

mode

mode 权限
r 只读
w 只写(会从头开始覆盖覆盖写当前文件内容)
a 追加写(从文件内容的末尾追加写内容,不会覆盖现有的内容)
r+ 读写(这里的写,也是从头覆盖写)
b 二进制模式

f.close()

在每次使用完文件过后,一定要是用f.close()关闭文件,避免资源的浪费

写入文件

只写w

  1. 首先创建一个空的文本文件

    image-20250301143220099

    1. 写入指定内容

      此时采用w模式(覆盖写)写入了两次内容

      f = open('workfile', 'w', encoding="utf-8")
      f.write('hello python\n')
      f.write('hello java\n')
      f.write('hello c\n')
      
      f.close()
      
      f = open('workfile', 'w', encoding="utf-8")
      f.write('hello python\n')
      f.write('hello java\n')
      f.write('hello c\n')
      
      f.close()
      

      image-20250301143426283

      文件内容中之显示了一次写入的内容,因为第一次写入的内容被第二写入的内容所覆盖

      也可以再次写入不同的内容来验证这一现象

      f = open('workfile', 'w', encoding='utf-8')
      f.write('niaho ----')
      
      f.close()
      

      image-20250301143751259

      f.write('niaho ----')将上一次的内容全部覆盖,并写入新的数据

覆盖写:覆盖写只在将一个文件打开后,开始写入内容时,如果再次之前文件已经被打开的话,将为按照当前写入位置,继续写 入数据

追加写a

写入方式与只写相似,只是写入模式换为a

此时workfile中的数据如下

image-20250301151949216

f = open('workfile', 'a')
f.write('追加写的数据')
f.close()

image-20250301152103389

追加写的数据会在原有数据的后面追加

读取文件

读取文件要在可读的模式下进行,即mode='r'

f.read(size)

  1. 使用f.read(size)可以读取文件,当省略size或者size为负数时,默认读取整个文件

    f = open('workfile', 'r', encoding='utf-8')
    print(f.read())
    
    f.close()
    

    image-20250301153302998

    若已经读取过一次文件,在文件关闭前再次读取此文件再次读取此文件时,会返回''

    f = open('workfile', 'r', encoding='utf-8')
    print(f.read())
    print(f.read())
    f.close()
    

    image-20250301153458501

    二进制模式下更能体现这一点

    f = open('workfile', 'rb')
    print(f.read())
    print(f.read())
    f.close()
    

    image-20250301153644115

    1. 当size的值为正整数时

      size 取其他值时,读取并返回最多 size 个字符(文本模式)或 size 个字节(二进制模式)。如已到达文件末尾,f.read() 返回空字符串(''

      f = open('workfile', 'r', encoding='utf-8')
      print(f.read(10))
      print(f.read(10))
      print(f.read(10))
      f.close()
      
      

      image-20250301154446217

f.readline()

f.readline() 从文件中读取单行数据;字符串末尾保留换行符(\n),只有在文件不以换行符结尾时,文件的最后一行才会省略换行符。这种方式让返回值清晰明确;只要 f.readline() 返回空字符串,就表示已经到达了文件末尾,空行使用 '\n' 表示,该字符串只包含一个换行符。

将文件的内容更改为如下

image-20250301154810411

  1. 使用f.readline()读取单行数据

    f = open('workfile', 'rb')
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.readline())
    

    image-20250301155055211

  2. 也可以使用循环读取内容

    f = open('workfile', 'rb')
    for i in f:
      print(i)
    f.close()
    

image-20250301154848540

定位

f.tell() 返回整数,给出文件对象在文件中的当前位置,表示为二进制模式下时从文件开始的字节数,以及文本模式下的意义不明的数字。

f.seek(offset, whence) 可以改变文件对象的位置。通过向参考点添加 offset 计算位置;参考点由 whence 参数指定。 whence 值为 0 时,表示从文件开头计算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。省略 whence 时,其默认值为 0,即使用文件开头作为参考点。

>>> f = open('workfile', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)      # 定位到文件中的第 6 个字节
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2)  # 定位到倒数第 3 个字节
13
>>> f.read(1)
b'd'

TOSTUDY

JSON

posted @ 2025-03-01 15:55  静香还需努力  阅读(50)  评论(0)    收藏  举报