Python文件读写操作

26次阅读
没有评论

共计 2142 个字符,预计需要花费 6 分钟才能阅读完成。

读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

pathlib 模块

用模块 pathlib 来处理文件,是一种更加简单的文件读写方法。

from pathlib import Path

path = Path("pi_million_digits.txt")
contents = path.read_text(encoding="utf-8")

lines = contents.splitlines()
pi_string = ""
for line in lines:
    pi_string += line.lstrip()

birthday = input("Enter your birthday, in the form mmddyy: ")
if birthday in pi_string:
    print("Your birthday appears in the first million digits of pi!")
else:
    print("Your birthday does not appear in the first million digits of pi.")

写入文件用 write_text()方法。

Path 类提供了很多很有用的方法。如果指定的文件或文件夹存在,exists()方法返回 True,否则返回 False。

文件打开模式

  • 只读:rt、rb

    • 存在,读
    • 不存在,报错
    • t 是文本类型,b 是二进制类型
  • 覆盖写:wt、wb

    • 存在,清空再写
    • 不存在,创建再写
  • 创建写:xt、xb

    • 存在,报错
    • 不存在,创建再写
  • 追加模式:at、ab

    • 存在,尾部追加
    • 不存在,创建再写

读文件

read(size)

如果 size 未给定或为负则一次性读取文件所有内容,以字符串的形式返回结果:

with open("new.txt", 'r', encoding='utf-8') as f:
  f.read()

# 读 n 个字符(字节)with open("new.txt", 'r', encoding='utf-8') as f:
  f.read(1) # 读 1 个字符

readline()

只读取文件一行的内容,以字符串的形式返回结果:

with open("new.txt", 'r', encoding='utf-8') as f:
  f.readline() # 读第一行
  f.readline() # 继续读下一行

readlines()

读取文件所有行,并且以列表的形式返回结果,一般配合 for 使用

with open("new.txt", 'r', encoding='utf-8') as f:
  for line in f.readlines():
    line.strip()  # 去掉换行符 n 

读大文件

with open("new.txt", 'r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())

读二进制文件

from io import SEEK_END, SEEK_SET

with open("1.jpg", "rb") as f:
    # 将文件指针移动到文件末尾
    f.seek(0, SEEK_END)
    # 获取文件指针移动的字节数,即文件大小
    print(f.tell())
    # 将文件指针移动到文件开头
    f.seek(0, SEEK_SET)

    data = f.read(1024)
    while data:
        print(data, end="")
        data = f.read(1024)

写文件

with open("new.txt", 'w', encoding='utf-8') as f:
    f.write('李小龙') # 写在缓冲区,系统会将缓冲区的内容刷到硬盘
    f.flush() # 立即刷到硬盘

writelines(s) 向文件写入一个元素为字符串的列表,如果需要换行则要自己加入每行的换行符。

光标位置

with open("new.txt", 'r+', encoding='utf-8') as f:
    f.seek(3) # 移动到指定的字节位置,一个汉字 3 个字节
    f.write('你好')
    print(f.tell()) # 获取当前光标位置

在 a 模式下,调用 write 在文件中写入内容时,永远只能将内容写到尾部,不会写到光标的位置。

上下文管理

Python 提供了 with 语句用于简化资源释放的操作。with 语句建立在上下文管理器 (实现__enter__和__exit__方法) 的基础上。

with open("new.txt", 'r', encoding='utf-8') as f1, open("new2.txt", 'w', encoding='utf-8') as f2:
    pass

上下文管理可以自动实现关闭文件,进行文件操作时,推荐使用。

计算文件 MD5

from hashlib import md5, sha256

hasher = md5()
hasher2 = sha256()

with open("1.jpg", "rb") as f:
    data = f.read(1024)
    while data:
        # 更新 MD5 对象的数据
        hasher.update(data)
        hasher2.update(data)
        data = f.read(1024)

# 获得 16 进制形式的 MD5 哈希摘要
print(hasher.hexdigest())
print(hasher2.hexdigest())

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2023-08-17发表,共计2142字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)