Python 文件的基本读写操作

目录

1. 打开与关闭文件

2. 文件的读取

3. 文件的写入


1. 打开与关闭文件

        在对文件进行操作前,首先要打开文件,用到的是open()函数,open()函数有以下几个参数:

def open(
    file: FileDescriptorOrPath,        # 文件路径
    mode: OpenTextMode = "r",          # 文件读取的方式,默认为"r"
    buffering: int = -1,               # 文件的缓冲策略
    encoding: str | None = None,       # 文件的编码类型
    errors: str | None = None,         # 指定在编码/解码过程中遇到错误时的处理方式
    newline: str | None = None,        # 控制文本文件如何处理换行符
    closefd: bool = True,              # 指定在文件关闭时是否关闭文件描述符
    opener: _Opener | None = None,     # 自定义的文件打开器
)

        在这些参数中,最常用的是"file" ,"mode"和"encoding"。其中file是文件路径,不必过多解释,剩下两个:

mode: OpenTextMode = "r"

  • 一个字符串,表示打开文件的模式。默认值是 "r"(只读模式)。
  • 常用模式包括:
    • "r": 只读
    • "w": 写入(如果文件不存在会创建新文件,存在则清空文件内容)
    • "a": 追加(写入内容会追加到文件末尾)
    • "b": 二进制模式(可以与其他模式组合使用,如 "rb", "wb", "ab"
    • "t": 文本模式(默认,可以省略,常与其他模式组合使用,如 "rt", "wt", "at")
    • "x": 排他性创建(文件不存在则创建,存在则报错)

encoding: str | None = None

  • 指定文件的编码类型,仅在文本模式下使用。常见的编码包括 "utf-8", "ascii", "latin-1" 等。
  • 默认值为 None,表示使用系统默认编码。

        使用open()函数的只读(r)模式打开文件时,如果该文件存在,会正常打开;如果文件不存在,程序会报错。

        使用open()函数的写入(w)模式打开文件时,如果该文件存在,会正常打开;如果文件不存在,会先创建这个文件,再打开。

        关闭文件使用的是close()函数,具体的使用且看下边的介绍。

        有这样一个名为“稻城亚丁.txt”的文件:

我希望有个如你一般的人,如山间清爽的风,
如古城温暖的光,从清晨到夜晚,由山野到书房,
等待不怕岁月蹉跎,不怕路途遥远,只要最后,
是你就好,听闻远方有你,动身跋涉千里,
我吹过你吹过的风,这算不算相拥,我走过你走过的路,
这算不算相逢,我还是喜欢你,从一而终,认真且怂

         打开与关闭文件:

# 打开或创建文件"稻城亚丁.txt"
f = open("稻城亚丁.txt", encoding="UTF-8")

# 关闭文件
f.close()

2. 文件的读取

        读取文件时首先要以读(r)的方式打开文件:

file_path = "稻城亚丁.txt"
f = open(file_path, 'r', encoding="UTF-8")

        然后使用read()等函数读取文件的内容:

# 读取文件的前10个字符
print(f"读取10个字节的结果:{f.read(10)}")
# 读取全部内容
print(f"读取全部内容的结果:{f.read()}")

# 读取文件的一行
line = f.readline()
print(f"line对象的内容是:{line}")
print(f"line对象的类型是:{type(line)}")

# 读取文件全部行,封装到列表中
lines = f.readlines()
print(f"lines对象的内容是:{lines}")
print(f"lines对象的类型是:{type(lines)}")

# 逐行读取文件的内容
for line in f:
    print(line)

        以上五种是比较普通的读取文件方式,如果尝试运行代码可能会发现两个问题:

1. 某些输出结果会有多余的空行。

2. 在连续read时,后一个read会接着前一个读取到的位置继续读取。

        这里多余的空行是因为txt文件中本身就有换行符,在每一行的末尾相当于一个"\n",而python的print()函数在输出完后会自动添加一个换行符,所以造成了多余的空行。

        至于第二个问题,可以联系C语言的指针来理解。在同一次文件打开后(f = open()),每个read读取完成相当于将指针指向了此次读取结果的末尾,下次再使用read时,会接着指针的位置继续读取。而且,在程序使用open()函数打开文件之后,该文件一直被程序占用,此时对文件进行删除、重命名和移动等操作都是不允许的。

        由此引出文件的关闭函数close(),只需在处理完读取文件后,使用f.close()即可关闭文件,重置文件的指针。

        为了避免在实际情况中忘记使用close()函数,Python提供了一种可以省去close()函数读取文件的方法:

with open("测试.txt", 'r', encoding="UTF-8") as f:
    for line in f:
        print(line)

         在with open语句下执行的操作在完成后会自动调用close()函数关闭文件,防止忘记调用close()函数而长时间占用文件。

3. 文件的写入

        文件的写入主要使用以下几个函数:

write()        //写入

flush()        //将缓冲区的内容写入到文件内

        文件的写入使用的函数是write()。文件的写入有两种方式,当打开文件的方式是可写(w)时,以覆盖的形式写入文件;当打开文件的方式是追加时,以追加的方式写入文件。

        在正式介绍写入之前,先讲一下write()函数在计算机中文件写如的流程。程序运行时write()函数会将文件写入到内存的缓冲区内,直到使用flush()函数或close()函数时,才将缓冲区内的内容写入到文件中。

        下面是写入文件的具体流程:

file_path = "test.txt"

# 以覆盖的方式写入文件
f = open(file_path, "w", encoding = "UTF-8")
f.wirte("欢迎关注菜鸟不秃头!")
file_path = "test.txt"

# 以追加的方式写入文件
f = open(file_path, "a", encoding = "UTF-8")
f.wirte("\n一起成为大佬吧!")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值