Python文件处理

2025年11月11日 | 阅读 23 分钟

引言

在本教程中,我们将讨论 Python 文件处理。Python 支持文件处理过程。到目前为止,我们一直从控制台读取输入并将其写回控制台与用户进行交互。用户可以轻松地在 Python 中处理文件,例如读取和写入文件。在其他编程语言中,文件处理过程冗长而复杂。但我们知道 Python 是一种易于学习的编程语言。因此,与其他事物一样,Python 中的文件处理也非常轻松且简短。

有时,仅在控制台上显示数据是不够的。要显示的数据可能非常大,并且控制台只能显示有限的数据,因为内存是易失性的,不可能一遍又一遍地恢复程序生成的数据。

当需要将数据永久存储到文件中时,文件处理起着重要作用。文件是磁盘上用于存储相关信息的命名位置。程序终止后,我们可以访问存储的信息(非易失性)。

在 Python 中,文件被视为文本或二进制两种模式。文件可以是文本格式或二进制格式,文件中的每一行都以特殊字符(如逗号 (,) 或换行符)结束。Python 逐行执行代码。因此,它会处理一行,然后请求解释器开始新的一行。这是 Python 中的一个连续过程。

因此,文件操作可以按以下顺序完成。

  • 打开文件
  • 读取或写入 - 执行操作
  • 关闭文件

打开文件

文件操作以文件打开开始。首先,打开文件,然后 Python 将开始操作。文件打开是通过 Python 中的 `open()` 函数完成的。此函数接受两个参数:文件名和文件访问模式。当使用 `open()` 函数时,我们必须指定文件打开的模式。该函数返回一个文件对象,可用于执行读取、写入等各种操作。

语法

Python 中打开文件的语法如下:

可以使用多种模式访问文件,例如读取、写入或追加。以下是打开文件的访问模式的详细信息。

序号访问模式描述
1r`r` 表示读取。因此,它以只读模式打开文件。文件指针位于开头。如果没有传递访问模式,文件将默认在此模式下打开。
2`rb`它以二进制格式以只读模式打开文件。文件指针位于文件开头。
3r+它以读写模式打开文件。文件指针位于文件开头。
4rb+它以二进制格式以读写模式打开文件。文件指针位于文件开头。
5w它以写入模式打开文件。如果文件已存在,则覆盖该文件;如果不存在同名文件,则创建一个新文件。文件指针位于文件开头。
6wb它以二进制格式以写入模式打开文件。如果文件已存在,则覆盖该文件;如果不存在同名文件,则创建一个新文件。文件指针位于文件开头。
7w+它以读写模式打开文件。它与 `r+` 的区别在于,如果文件已存在,它会覆盖之前的文件,而 `r+` 不会覆盖之前写入的文件。如果不存在文件,则创建一个新文件。文件指针位于文件开头。
8wb+它以二进制格式以读写模式打开文件。文件指针位于文件开头。
9a它以追加模式打开文件。如果文件已存在,文件指针将位于之前写入文件的末尾。如果不存在同名文件,则创建一个新文件。
10ab它以二进制格式以追加模式打开文件。如果文件已存在,指针将位于之前写入文件的末尾。如果不存在同名文件,则以二进制格式创建一个新文件。
11a+它以追加和读取模式打开文件。如果文件存在,文件指针将保留在文件末尾。如果不存在同名文件,则创建一个新文件。
12ab+它以二进制格式以追加和读取模式打开文件。文件指针将保留在文件末尾。

让我们看一个简单的例子,以读取模式打开名为 "file.txt"(存储在同一目录中)的文件,并在控制台上打印其内容。

读取模式的程序代码

这是 Python 中的读取操作。我们使用给定的代码打开现有文件,然后读取它。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

<class '_io.TextIOWrapper'>
file is opened successfully

在上面的代码中,我们将 `filename` 作为第一个参数传递,并将文件以读取模式打开,因为我们将 `r` 作为第二个参数。`fileptr` 保存文件对象,如果文件成功打开,它将执行打印语句。

写入模式的程序代码

这是 Python 中的写入操作。我们使用给定的代码打开现有文件,然后对其进行写入。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

`close()` 方法

close 方法用于终止程序。一旦在文件上完成所有操作,我们必须使用 Python 脚本通过 `close()` 方法将其关闭。一旦在文件对象上调用 `close()` 方法,任何未写入的信息都会被销毁。

我们可以使用文件系统对 Python 中当前打开的文件执行任何外部操作,因此在完成所有操作后关闭文件是一种良好的做法。过早使用 `close()` 方法可能会导致您想写入文件的某些信息被销毁。

`close()` 方法的语法如下。

语法

Python 中关闭文件的语法如下:

请看以下示例。

关闭方法的程序代码

在这里,我们编写关闭方法的 Python 程序代码。代码如下:

关闭文件后,我们无法对文件执行任何操作。文件需要正确关闭。如果在执行文件中的某些操作时发生任何异常,程序将在不关闭文件的情况下终止。

我们应该使用以下方法来克服这类问题。

`with` 语句

`with` 语句是在 Python 2.5 中引入的。`with` 语句在处理文件时很有用。它用于需要在一对语句之间执行代码块的场景。

语法

Python 中文件 `with` 语句的语法如下:

`with` 语句的优点是,无论嵌套块如何退出,它都保证关闭文件。

在文件的情况下,始终建议使用 `with` 语句,因为如果嵌套代码块中发生 `break`、`return` 或异常,它会自动关闭文件,我们无需编写 `close()` 函数。它不会让文件损坏。

`with` 语句的程序代码 1

在这里,我们编写 `with` 语句的 Python 程序代码。代码如下:

`with` 语句的程序代码 2

在这里,我们编写 `with` 语句的 Python 程序代码。代码如下:

写入文件

要将一些文本写入文件,我们需要使用 `open` 方法打开文件,然后我们可以使用 `write` 方法在此文件中进行写入。如果我们想打开一个不存在于我们系统中的文件,它会创建一个新文件。另一方面,如果文件存在,则会擦除旧内容并将新内容添加到此文件中。这是通过以下访问模式完成的。

w: 如果文件存在,它将覆盖该文件。文件指针位于文件开头。

a: 它将追加到现有文件。文件指针位于文件末尾。如果不存在文件,则创建一个新文件。

写入方法的程序代码 1

在这里,我们编写写入方法的 Python 程序代码。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

File2.txt
Python is the modern programming language. It is done any kind of program in shortest way.

我们以 `w` 模式打开了文件。`file1.txt` 文件不存在,它创建了一个新文件,我们使用 `write()` 函数将内容写入文件。

写入方法的程序代码 2

在这里,我们编写写入方法的 Python 程序代码。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Hello coders
Welcome to javaTpoint

写入方法的程序代码 3

在这里,我们编写写入方法的 Python 程序代码。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Python is the modern day language. It makes things so simple.
It is the fastest growing language Python has an easy syntax and user-friendly interaction.

`file2.txt` 文件的快照

Python File Handling

我们可以看到文件的内容已修改。我们以 `a` 模式打开了文件,它追加了内容到现有的 `file2.txt` 中。

要使用 Python 脚本读取文件,Python 提供了 `read()` 方法。`read()` 方法从文件中读取一个字符串。它可以以文本格式和二进制格式读取数据。

语法

Python 中文件 `read()` 方法的语法如下:

在这里,`count` 是从文件开头开始要从文件中读取的字节数。如果未指定 `count`,则它可能会一直读取文件内容直到文件末尾。

`read()` 方法的程序代码

在这里,我们编写 `read()` 方法的 Python 程序代码。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

<class 'str'>
Python is 

在上面的代码中,我们使用 `read()` 函数读取了 `file2.txt` 的内容。我们将 `count` 值设置为十,这意味着它将读取文件的前十个字符。

如果我们使用以下行,它将打印文件的所有内容。因此,它只打印“Python is”。要读取整个文件内容,代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Python is the modern-day language. It makes things so simple.
It is the fastest-growing programming language Python has easy an syntax and user-friendly interaction.

通过 for 循环读取文件

我们可以在打开文件时使用 `read()` 方法。`read` 方法也可以通过 for 循环完成。我们可以使用 for 循环读取文件。考虑以下示例。

使用 for 循环读取文件的程序代码 1

在这里,我们给出了使用 for 循环读取文件的示例。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Python is the modern day language.

It makes things so simple.

Python has easy syntax and user-friendly interaction.

使用 for 循环读取文件的程序代码 2

在这里,我们给出了使用 for 循环读取文件的示例。代码如下:

输出

Line1: H
Line2: e
Line3: l
Line4: l
Line5: o
Line6: 
Line7: C
Line8: o
Line9: d
Line10: e
Line11: r
Line12: s
Line13: 
Line14: J
Line15: a
Line16: v
Line17: a
Line18: T
Line19: p
Line20: o
Line21: i
Line22: n
Line23: t
Line24: 

读取文件的行

Python 可以通过使用 `readline()` 方法逐行读取文件。`readline()` 方法从开头读取文件的行,即,如果我们使用 `readline()` 方法两次,我们可以获得文件的前两行。

考虑以下包含 `readline()` 函数的示例,该函数读取我们包含三行的文件 `"file2.txt"` 的第一行。考虑以下示例。

在这里,我们给出了在 Python 中使用 `readline()` 函数读取行的示例。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Python is the modern day language.

It makes things so simple.

我们调用了两次 `readline()` 函数,因此它从文件中读取了两行。这意味着,如果您在程序中调用 `readline()` 函数 n 次,那么它将从文件中读取 n 行。这就是 Python 中 `readline()` 函数的用途。Python 还提供了 `readlines()` 方法,用于读取行。它返回直到达到文件末尾 (EOF) 的行列表。

示例 2

在这里,我们给出了在 Python 中使用 `readline()` 函数读取行的示例。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

['Python is the modern day language.\n', 'It makes things so simple.\n', 'Python has easy syntax and user-friendly interaction.']

示例 3

在这里,我们给出了在 Python 中使用 `readline()` 函数读取行的示例。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Line1: Hello
Line2: Coders
Line3: JavaTpoint

创建新文件

可以使用 `open()` 函数的以下访问模式之一来创建新文件。`open()` 函数使用许多参数。其语法如下:

file = open(path_to_file, mode)

`x`、`a` 和 `w` 是 `open()` 函数的模式。这些模式的用法如下:

x: 它会创建一个指定名称的新文件。如果存在同名文件,则会导致错误。

a: 如果不存在同名文件,则创建一个指定名称的新文件。如果已存在同名文件,则将内容追加到该文件。

w: 如果不存在同名文件,则创建一个指定名称的新文件。它会覆盖现有文件。

请看以下示例。

创建新文件的程序代码 1

在这里,我们给出了在 Python 中创建新文件的示例。要创建文件,我们必须使用 `open()` 方法。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

<_io.TextIOWrapper name='file2.txt' mode='x' encoding='cp1252'>
File created successfully 

创建新文件的程序代码 2

在这里,我们给出了在 Python 中创建新文件的示例。要创建文件,我们必须使用 `open()` 方法。在这里,我们使用 `try` 块来消除错误。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

The file is does not exist

文件指针位置

Python 提供了 `tell()` 方法,用于打印文件指针当前所在的字节数。`tell()` 方法返回此文件中读写指针的位置。`tell()` 方法的语法如下:

文件指针位置的程序代码 1

在这里,我们给出了如何在 Python 中查找文件指针位置的示例。我们在这里使用 `tell()` 方法,它返回字节数。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

The filepointer is at byte : 0
After reading, the filepointer is at: 117

文件指针位置的程序代码 2

在这里,我们给出了如何在 Python 中查找文件指针位置的另一个示例。我们在这里也使用 `tell()` 方法,它返回字节数。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

  The pointer position is: 0
  

修改文件指针位置

在实际应用程序中,有时我们需要从外部更改文件指针位置,因为我们可能需要在不同位置读取或写入内容。

为此,Python 提供了 `seek()` 方法,该方法使我们能够从外部修改文件指针位置。这意味着,使用 `seek()` 方法,我们可以轻松地在文件中移动光标,从中读取或写入文件。

语法

`seek()` 方法的语法如下:

`seek()` 方法接受两个参数

offset: 它指的是文件指针在文件中的新位置。

from: 它指示要移动字节的参考位置。如果设置为 0,则以文件开头作为参考位置。如果设置为 1,则以文件指针的当前位置作为参考位置。如果设置为 2,则以文件指针的末尾作为参考位置。

请看以下示例。

在这里,我们给出了如何在 Python 中使用 `seek()` 方法修改指针位置的示例。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

The filepointer is at byte : 0
After reading, the filepointer is at: 10

Python OS 模块

重命名文件

Python `os` 模块支持与操作系统进行交互。它来自 Python 标准实用模块。`os` 模块提供了一种可移植的方式来使用 Python 中依赖于操作系统的功能。`os` 模块提供涉及文件处理操作(如重命名、删除等)的函数。它提供了 `rename()` 方法来将指定文件重命名为新名称。使用 `rename()` 方法,我们可以轻松地重命名现有文件。此方法没有返回值。`rename()` 方法的语法如下。

语法

Python 中 `rename` 方法的语法如下:

第一个参数是当前文件名,第二个参数是修改后的名称。我们可以通过传递这两个参数来更改文件名。

重命名方法的程序代码 1

在这里,我们给出了在 Python 中使用 `rename()` 方法重命名文件的示例。当前文件名是 `file2.txt`,新文件名是 `file3.txt`。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

The above code renamed current file2.txt to file3.txt

重命名方法的程序代码 2

在这里,我们给出了在 Python 中使用 `rename()` 方法重命名文件的示例。当前文件名是源,新文件名是目标。代码如下:

删除文件

`os` 模块提供了 `remove()` 方法,用于删除指定的文件。

语法

`remove` 方法的语法如下:

删除方法的程序代码 1

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

    The file named file3.txt is deleted.

删除方法的程序代码 2

在这里,我们给出了在 Python 中使用 `remove()` 方法删除文件的示例。文件名是 `file3.txt`,`remove()` 方法会删除它。如果文件不存在,则打印命令“此文件不存在”。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

    This file is not existed

创建新目录

`mkdir()` 方法用于在当前工作目录中创建目录。它以数字模式创建目录。如果文件已存在于系统中,则会发生错误,在 Python 中称为 `FileExistsError`。`mkdir()` 方法不返回任何值。创建新目录的语法如下。

语法

Python 中 `mkdir()` 方法的语法如下:

输出

参数

Python 中 `mkdir()` 方法的语法如下:

path - 类似 path 的对象,表示 bytes 或 string 对象的路径。

mode - 模式由整数值表示,表示创建的模式。如果未创建模式,则默认值为 `0o777`。在 `mkdir()` 方法中使用它是可选的。

dir_fd - 当指定的路径是绝对路径时,`dir_fd` 被忽略。在 `mkdir()` 方法中使用它是可选的。

`mkdir()` 方法的程序代码 1

在这里,我们给出了 `mkdir()` 方法的示例,通过它可以创建新的 Python 目录。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Create a new dictionary which is named new

`mkdir()` 方法的程序代码 2

在这里,我们给出了 `mkdir()` 方法的示例,通过它可以创建新的 Python 目录。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

 [Error 20] File exists: '/D:/JavaTpoint' 
 

`getcwd()` 方法

此方法返回具有绝对值的当前工作目录。`getcwd()` 方法返回一个表示 Python 中工作目录的字符串值。在 `getcwd()` 方法中,不需要任何参数。

`getcwd()` 方法的用法语法如下。

语法

Python 中 `getcwd()` 方法的语法如下:

`getcwd()` 方法的程序代码 1

在这里,我们给出了 `getcwd()` 方法的示例,通过它可以创建新的 Python 目录。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

'C:\\Users\\DEVANSH SHARMA'

`getcwd()` 方法的程序代码 2

在这里,我们给出了 `getcwd()` 方法的示例,通过它可以创建新的 Python 目录。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

The working directory is: C:\\Users\\JavaTpoint

更改当前工作目录

`chdir()` 方法用于将当前工作目录更改为指定目录。`chdir()` 方法接受新目录路径的单个参数。`chdir()` 方法不返回任何值。

语法

`chdir()` 方法的语法如下:

`chdir()` 方法的程序代码 1

在这里,我们给出了 `chdir()` 方法的示例,通过它可以将当前 Python 工作目录更改为新目录。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

'C:\\Users\\DEVANSH SHARMA\\Documents'

`chdir()` 方法的程序代码 2

在这里,我们给出了 `chdir()` 方法的另一个示例,通过它可以将当前 Python 工作目录更改为新目录。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Currently working directory is changed

删除目录

`rmdir()` 方法用于删除指定的目录。如果目录不为空,则会发生 `OSError`。`rmdir()` 方法没有任何返回值。

语法

`rmdir()` 方法的程序代码 1

在这里,我们给出了 `rmdir()` 方法的示例,通过它可以删除 Python 目录。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

It will remove the specified directory.

`rmdir()` 方法的程序代码 2

在这里,我们给出了 `rmdir()` 方法的另一个示例,通过它可以删除 Python 目录。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

The directory 'JavaTpoint' is successfully removed

输出

在这里,我们给出了 `rmdir()` 方法的示例,通过它可以删除 Python 目录。我们在这里使用 `try` 块来处理错误。代码如下:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

[Error 30] Permission denied: '/D:/User/Documents/JavaTpoint'
The directory 'JavaTpoint' cannot be removed successfully

将 Python 输出写入文件

在 Python 中,需要将 Python 脚本的输出写入文件。

`subprocess` 模块的 `check_call()` 方法用于执行 Python 脚本并将该脚本的输出写入文件。

以下示例包含两个 Python 脚本。`file1.py` 脚本执行 `file.py` 脚本,并将其输出写入文本文件 `output.txt`。

程序代码

file1.py

file.py

文件相关方法

文件对象提供了以下方法来操作各种操作系统上的文件。在这里,我们讨论了这些方法及其在 Python 中的用途。

序号方法描述
1file.close()它关闭打开的文件。文件一旦关闭,就无法再读取或写入。
2File.fush()它刷新内部缓冲区。
3File.fileno()它返回底层实现用于向操作系统请求 I/O 的文件描述符。
4File.isatty()如果文件连接到 TTY 设备,则返回 true,否则返回 false。
5File.next()它从文件中返回下一行。
6File.read([size])它读取指定大小的文件。
7File.readline([size])它从文件中读取一行,并将文件指针移到新行的开头。
8File.readlines([sizehint])它返回一个包含文件中所有行的列表。它使用 `readline()` 函数读取文件直到到达 EOF。
9File.seek(offset[,from)它使用指定的参考点修改文件指针的位置到指定偏移量。
10File.tell()它返回文件指针在文件中的当前位置。
11File.truncate([size])它将文件截断到可选的指定大小。
12File.write(str)它将指定的字符串写入文件
13File.writelines(seq)它将一系列字符串写入文件。

结论

在本教程中,我们简要讨论了 Python 文件处理。用户可以轻松地在 Python 中处理文件,例如读取和写入文件。在这里,我们讨论了 Python 中的各种方法,通过这些方法我们可以轻松地读取、写入、删除或重命名文件。我们还提供了这些方法的程序代码以更好地理解。