有时您需要在多个文本文件里批量替换,例如,如果您想更新某些文件以使用美式拼写而不是英式拼写。
在这个快速提示中,我将向您展示一个示例,其中我们有五个拼写错误的文本文件。也就是说,不是写“ World ”,而是写“ Wolrd ”。该示例将向您展示我们如何使用 Python 来更正目录中包含的所有文本文件中该单词的拼写。
让我们开始吧!

1、数据准备
在我们继续这个例子之前,让我们准备我们想要使用的数据(文本文件)。对于本教程,我们将创建一个名为hello的目录,其中将包含不同的文件和子目录,包括名为1.txt、2.txt、3.txt、4.txt和5.txt的文本文件。
虽然我们将用于遍历文件列表的函数将包括目录中的所有文件,但我们可以在代码中添加自己的条件来限制我们要修改的文件。
2、执行
让我们进入有趣的部分。我们需要做的第一件事是读取目录hello的内容。为此,我们可以使用scandir()方法,如下:
import osdirectory = os.scandir('hello') |
此方法返回一个迭代器。我们可以使用它创建一个for循环来查看目录中的所有文件:
entries = [it.name for it in directory]print(entries) |
在这种情况下,我们将得到:
['.nomedia', '1.txt', '2.txt', '3.txt', '4.txt', '5.txt', 'others'] |
这表明我们在hello目录中有五个.txt文件。但是,它还包含一些其他文件和子目录。
现在我们将遍历目录hello中的所有文件。for-in我们可以在使用with语句时在循环的帮助下做到这一点。当我们执行完此块中的代码时,这将自动释放资源。
with os.scandir('hello') as directory:for item in directory: |
由于我们要在目录中的五个文件中的每一个中查找Wolrd,所以这个阶段的正常做法是打开并读取每个文件的内容。我们将使用方法跳过目录,使用文件名上的方法跳过以字符is_file()开头的文件。这使我们只能读取和写入我们实际打算修改的文件。.startswith()
我们还使用mode中的open()方法打开文件。r+这允许我们读取文件的内容,然后在进行必要的更改后写入文件。
if not item.name.startswith('.') and item.is_file():with open(item, mode="r+") as file:file_text = file.read() |
现在是至关重要的一步,尤其是在讨论模式匹配时——在我们的例子中,搜索Wolrd。此步骤使用正则表达式。在 Python 中,为了使用正则表达式,我们将使用re模块。
我们将使用该模块中的两个主要功能。第一个是compile():
将正则表达式模式编译成正则表达式对象,可以使用它的match()和search()方法进行匹配。
第二个是sub(),用正确的拼写代替错误的拼写。因此,我们将执行以下操作:
regex = re.compile('Wolrd')file_text = regex.sub('World', file_text) |
最后,我们希望将替换后的新文本写入我们的文件,如下所示:
file.seek(0)file.write(file_text) |
3、最后
在本节中,让我们看看将在每个文件中查找Wolrd并将其替换为World的整个 Python 脚本的外观:
import os, rewith os.scandir('hello') as directory:for item in directory:if not item.name.startswith('.') and item.is_file():with open(item, mode="r+") as file:file_text = file.read()regex = re.compile('Wolrd')file_text = regex.sub('World', file_text)file.seek(0)file.write(file_text) |
正如我们所见,Python 使得使用 for 循环对多个文件进行修改变得非常容易。这里要记住的另一个重要部分是使用正则表达式进行模式匹配。
如果您想了解更多关于 Python 循环的信息,请查看Python 循环上的平滑复习。并且,有关正则表达式的更多信息,请查看Python 中的正则表达式。


































发表评论