Python 中 open(),close()组合与 with open()的区别

目录

  • 一、open()函数的基本用法
    • 1. 读取文件
    • 2. 打开模式
    • 3. 编码方式
  • 二、open(),close()与 with open()的区别

一、open()函数的基本用法

在介绍区别之前先简单说明 open() 函数的用法,分为以下三个部分:

1. 读取文件

使用格式:

文件句柄 = open('文件路径', '模式',编码方式)

流程如下:

f = open(file_path, 'r', encoding='utf-8')  # 打开文件, 编码方式可省略,一般取默认
data = f.read()                             # 读取文件
print(data)                                 # 打印读取内容
f.close()                                   # 关闭文件

或 
with open(file_name, 'r') as f:
	data = f.read()                         # 读取文件
	print(data)                             # 打印读取内容                                  

注意,上述文件的 file_path 也就是文件的路径,可以是绝对路径(文件在硬盘的位置路径),也可以是相对路径(与脚本同在一个目录下)。
上述读取文件是使用 read () 表示读取整个文件的内容,也可以使用 readline() 表示读取文件一行,或 readlines() 按行读取文件内容。最后要使用 close() 函数关闭文件。

2. 打开模式

模式的参数也就是第二个参数,主要有以下模式:


r   以只读方式打开文件。这是默认模式,文件必须存在,不存在抛出错误
rb  以二进制格式打开一个文件用于只读。
r+  打开一个文件用于读写。文件指针将会放在文件的开头,读完就追加。
w   打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+  打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a   打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+  打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

注:后面有带 b 的方式,不需要考虑编码方式。带 + 号的,则可读可写,不过它们之间还是有区别的。

3. 编码方式

  • win系统默认是gbk编码的,所以桌面生成的TXT之类的都是gbk编码的;
  • 出现乱码,一般都是原文件的编码方式和打开指定的编码不一致所致。

二、open(),close()与 with open()的区别

这也是我们平时读取文件容易忽略的地方。

  • 一般是使用 open()close() 组合来打开和关闭文件。
    但这样做时,如果程序存在bug,导致close()语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能会导致数据丢失或受损。如果在程序中过早地调用close(),你会发现需要使用文件时它已关闭(无法访问),这会导致更多的错误。
  • 关键字 with 在不再需要访问文件后自动将其关闭。
    在这个程序中,注意到我们调用了open(),但没有调用close();并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用关键字 with,可让Python去确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。

你可能感兴趣的:(Python 中 open(),close()组合与 with open()的区别)