Python文件读写操作

编程 · 2023-08-17 · 176 人浏览

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

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在文件中写入内容时,永远只能将内容写到尾部,不会写到光标的位置。

上下文管理

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())
Python
Theme Jasmine by Kent Liao