通过示例了解Python中的文件处理,在这篇关于使用 Python 处理文件的文章中,您将学习如何使用 pathlib 和 OS 模块来浏览本地文件和目录。您还将学习如何在 Python 中打开、读取、写入和关闭文件。文件处理是在程序终止后保存数据的好方法。来自计算机程序的数据被保存到一个文件中,以后可以访问。与许多其他编程语言一样,Python 提供了创建、打开、读取数据和将数据写入文件的便捷方法。
Python中的文件处理:文件和文件路径
文件是从计算机程序中保存数据的快速替代方法。随机存取存储器只能暂时存储数据,因为计算机系统关闭后所有以前的数据都会立即丢失。文件是首选,因为它们是计算机上更永久的数据存储点。文件是本地磁盘上存储数据的位置。它有两个基本属性:文件名及其路径。
使用路径库模块
Python 提供了 pathlib 模块来执行诸如浏览目录和文件、创建文件夹、识别文件路径等操作。pathlib 模块从 Python 3.4 开始可用,它提供了一种面向对象的编程方法来处理文件系统路径。
pathlib 模块有一个Path
用于导航文件系统路径的类。你像这样将它导入你的程序:
from pathlib import Path
如何获取当前工作目录
cwd()
您可以使用对象的方法在 Python 中获取当前工作目录(“cwd”)Path
。此方法以字符串形式返回我们当前工作的目录路径,如下面的代码片段所示:
from pathlib import Path p = Path.cwd() print(p)
这是该代码的输出:
/home/ini/Dev/Tutorial/zuze
绝对路径与相对路径
可以通过两种方式指定文件路径:通过绝对路径或相对路径。两个路径都指向当前文件位置。
文件的绝对路径声明其路径,从根文件夹开始。绝对路径如下所示:
/home/ini/Dev/Tutorial/zuze/filehandling.py
根文件夹(如上面的代码所示)home
位于 Linux 操作系统上。
文件的相对路径声明其相对于当前工作目录的路径。让我们看一个例子:
./zuze/filehandling.py
上面的代码显示了 Python 文件的相对路径filehandling.py
。
如何在 Python 中创建目录
该类Path
具有mkdir()
在 Python 中创建新文件夹或目录的方法。该mkdir()
方法接受三个参数:mode
,parents
和exist_ok
。
和默认设置parents
为。设置为 时,如果指定路径中的父项不存在,则该参数将引发异常。如果目标目录已经存在,则默认抛出一个。exist_ok
False
False
parents
FileNotFoundError
exist_ok
FileExistsError
这是一个例子:
from pathlib import Path path = '/home/ini/Dev/Tutorial/zuze/projects' p = Path(path) p.mkdir()
在上面的示例中,我们有一个path
变量来设置新目录的位置。已使用路径字符串参数创建了一个对象,并在上Path
调用了该方法。如果我们现在检查文件夹,我们将找到新创建的文件夹。p
mkdir()
p
sitepoint
projects
如何更改当前工作目录
pathlib 模块不支持更改目录。如果我们想这样做,我们必须使用 OS 模块——另一个用于与我们的计算机操作系统交互的内置模块。
要使用 OS 模块,我们将其导入到我们的程序中,如下所示:
import os
要在目录之间切换,请使用chdir()
OS 模块的方法。新路径作为参数传递给从当前工作目录更改为另一个工作目录的方法。
在前面的代码示例中创建一个新文件夹后,我们可以将目录更改为该projects
文件夹:
import os os.chdir('/home/ini/Dev/Tutorial/zuze/projects')
要确认目录中的更改,请使用Path
对象的cwd()
方法,该方法返回当前工作目录的字符串:/home/ini/Dev/Tutorial/zuze/projects
。
如何在 Python 中删除文件或目录
Path
我们可以分别使用对象unlink()
和rmdir()
方法在 Python 中删除文件和目录。
要在 Python 中删除文件,请实例化文件的Path
对象并应用该unlink()
方法。(删除文件时,FileNotFoundError
如果文件不存在,程序会抛出异常。)
让我们考虑一个代码示例:
from pathlib import Path path = '/home/ini/Dev/Tutorial/zuze/file_handling.txt' p = Path(path) p.unlink()
该file_handling.txt
文件将从目录中删除sitepoint
。如果我们再次尝试删除该文件,我们将得到FileNotFoundError
异常。
要删除或删除目录,请将rmdir()
方法应用于Path
要删除的对象,如下所示:
from pathlib import Path path = '/home/ini/Dev/Tutorial/projects' p = Path(path) p.rmdir()
该projects
文件夹从文件夹中删除Tutorial
。
如何在 Python 中列出文件和目录
要获得目录所有内容的概览,请使用iterdir()
文件Path
对象上的方法。该方法返回一个生成器对象。我们现在可以遍历生成器对象以获取该特定文件夹中的所有现有文件和目录:
from pathlib import Path path = '/home/ini/Dev/Tutorial/zuze' p = Path(path) for file in p.iterdir(): print(file)
这是上面代码的输出:
/home/ini/Dev/Tutorial/zuze/array.py /home/ini/Dev/Tutorial/zuze/unittesting.py /home/ini/Dev/Tutorial/zuze/code /home/ini/Dev/Tutorial/zuze/search_replace.py /home/ini/Dev/Tutorial/zuze/__pycache__ /home/ini/Dev/Tutorial/zuze/pangram.txt /home/ini/Dev/Tutorial/zuze/random.txt /home/ini/Dev/Tutorial/zuze/.pytest_cache /home/ini/Dev/Tutorial/zuze/exception.py /home/ini/Dev/Tutorial/zuze/files.py /home/ini/Dev/Tutorial/zuze/regex.py /home/ini/Dev/Tutorial/zuze/filehandling.py
Python 中的文件处理:读取和写入数据
Python 中的文件处理很简单,不像其他编程语言有时那样复杂。打开 Python 文件进行任何操作时,有不同的文件访问模式可供选择:
r
:打开文件进行读取。当文件不存在时,读取模式会抛出错误。r+
:打开文件以将数据读取和写入文件对象。如果文件不存在,则会抛出错误。w
:以这种方式打开文件写入数据。写模式覆盖现有数据并创建一个新的文件对象(如果它不存在)。w+
:打开文件读写数据。在此模式下打开时,文件上的现有数据将被覆盖。a
: 如果文件存在,追加模式追加到文件。如果没有现有文件,它还会创建一个新文件。它不会覆盖现有数据。a+
:此模式打开一个文件用于追加和读取数据。x
: create 模式用于在 Python 中创建文件。如果文件存在,则抛出错误。
添加b
到任何访问模式会将其从默认文本格式更改为二进制格式(例如,rb
、rb+
、wb
等)。
如何在 Python 中打开一个文件
要在 Python 中打开文件,我们可以使用该open()
函数。它至少需要两个参数——文件名和模式描述——并返回一个文件对象。默认情况下,文件以文本模式打开以供读取,但我们可以指定是否需要二进制模式。
下面是一些用于打开文件的简单代码:
f = open(file, mode='r', encoding=None)
在这一步之后,如上面的代码所示,我们可以开始对文件对象进行读写操作。默认情况下,文件始终以文本模式处理。该open()
方法至少有两个参数:文件路径和模式。
如何在 Python 中关闭文件
打开文件对象并执行文件处理操作后,我们需要关闭文件。它通常是在 Python 中读取或写入文件的最后一步。文件对象的close()
方法用于关闭以前打开的文件。
在 Python 中关闭文件如下所示:
f = open('filename', 'mode', encoding=None) // file operations, reading, writing or appending f.close()
with 语句
在打开文件并执行文件操作后关闭文件是标准做法。某些文件打开后可能会忘记关闭。
该with
语句在其范围内完成最后一个文件处理操作后自动关闭文件。例如:
with open('random.txt', 'r', encoding='UTF-8') as f: print(f.read())
这是上面代码的输出:
Hello, World! Hello, World!
如上面的代码片段所示,with
语句在语句之后隐式关闭文件print
。(我们将在with
本教程的其余部分使用该语句。)
如何在 Python 中读取文件
在 Python 中有几种方法可以从文件中读取数据。read()
我们可以使用、readline()
和readlines()
方法读取文件的内容。
读取()方法
该read()
方法返回正在读取的文件中所有字符的字符串。指针位于文件内容的开头。默认模式是从文件开头读取到文件结尾,除非指定了字符数。
看看下面的代码片段:
with open('random.txt', 'r', encoding='UTF-8') as f: print(f.read())
这是该代码的输出:
This is some random text. Here is the second line. The sky is blue. Roses are red.
我们可以指定从文本文件中读取多少个字符。只需将字符数作为参数传递给read()
方法:
with open('random.txt', 'r', encoding='UTF-8') as f: print(f.read(12))
这是该代码的输出:
This is some
如上例所示,解释器仅从整个文件中读取 12 个字符。
读取线()方法
此方法一次从文件中读取一行。它从文件的开头读取并在找到换行符的地方停止。请参阅下面的代码示例:
with open('random.txt', 'r', encoding='UTF-8') as f: print(f.readline())
上面的代码输出如下:
This is some random text.
readlines() 方法
此方法返回正在读取的现有文件中所有行的列表。请参阅下面的代码片段:
with open('random.txt', 'r', encoding='UTF-8') as f: print(f.readlines())
这是输出:
['This is some random text.\n', 'Here is the second line.\n', 'The sky is blue.\n', 'Roses are red.']
注意:当到达文件末尾时,所有读取文件流的方法都会返回一个空值。该seek()
方法将文件光标返回到文件的开头。
如何在 Python 中写入文件
write()
尝试将数据写入文件时,Python 中的方法很有用。要写入打开的文件,访问模式应设置为以下之一:w
、w+
、a
、a+
等。再一次,默认是文本模式而不是二进制模式。
write()
方法_
当我们想要将数据写入文本文件时,将字符串参数传递给此方法。请记住,如果文件存在,写入模式将覆盖现有数据:
with open('random.txt', 'w', encoding='UTF-8') as f: f.write("Hello, World!")
传递给该write()
方法的新字符串参数将覆盖我们之前在random.txt
文件中的文本,我们将得到以下内容:
Hello, World!
writelines() 方法
此方法可帮助我们一次将多个字符串插入到一个文本文件中。通过将列表作为方法的参数传递,我们可以一次性将多行字符串写入文件:
words = ['The sky is blue.\n', 'Roses are red.'] with open('random.txt', 'w', encoding='UTF-8') as f: f.writelines(words)
上面的代码显示了random.txt
正在打开的文件和插入其中的字符串列表。的内容random.txt
现在看起来像这样:
The sky is blue. Roses are red.
结论
文件有两个重要的属性:文件名和路径。pathlib 和 os 模块帮助我们浏览目录并执行某些操作。Python 文件处理涉及使用多种方法在文件对象上打开、创建、读取和写入数据。
如果我们想要与文本或二进制文件中的内容进行交互,了解 Python 中的文件处理也很重要。始终确保在对文件执行操作后关闭文件。该with
语句使在 Python 中执行文件处理变得更加容易,因为它在我们完成后隐式关闭文件对象。