Python - 如何更新和替换文件中的文本

239 阅读7分钟

5/5 - (1票)

问题的提出和解决方案概述

在这篇文章中,你将学习如何使用Python更新和替换文件中的文本。

为了使它更有趣,我们有以下运行场景。

Tristen,《多伦多星报》的专栏作家,正在写一个关于尼亚加拉大瀑布的专栏。他注意到他的写作有一些问题。他没有替换或更新文本,而是给你发了一个文件,让你帮他完成这个任务。

niagara.txt的内容(包括错误和遗漏)。

尼亚加拉法尔斯是位于尼亚加拉河上的一个瀑布,被认为是一个主要的旅游目的地和景点。法尔斯位于加拿大尼亚加拉瀑布和美国纽约州的边界。多年来,蜜月旅行者和敢死队都出于非常不同的原因享受法尔斯。敢死队最臭名昭著的把戏是走钢丝穿过法尔斯,或坐着木桶越过法尔斯。现在,大多数人都是冲着这里惊人的美景和独特之处来的。

💬 问题。我们将如何编写代码来替换或更新文件中的文本?

我们可以通过以下的一个选项来完成这项任务。

  • 方法1:使用 open()replace()
  • 方法2:使用 [pathlib2](https://pypi.org/project/pathlib2/) [replace()](https://pypi.org/project/replace/)
  • 方法3:使用 [pyutil](https://pyutil.readthedocs.io/en/latest/)filereplace()
  • 方法4:使用 open()write()
  • 方法5:使用regex

方法1:使用open()和replace()

这个方法读入一个文件,替换现有的文本,然后保存该文件。在这个例子中,Fals 的每一次出现都被替换为正确的拼写,Falls

with open('niagara.txt', 'r') as fp:
    data = fp.read()
    typos = data.replace('Fals', 'Falls')

with open('niagara.txt', 'w') as fp:
    fp.write(typos)

以上,使用with open 打开niagara.txt ,在读取 (r) 模式下,并将其保存为一个文件对象。这个对象允许对文件进行访问和操作。如果fp 被输出到终端,它将看起来类似于下面。

<_io.TextIOWrapper name='niagara.txt' mode='r' encoding='cp1252'>

然后,使用文件对象(fp)和方法读取文件内容。 [read()](https://blog.finxter.com/how-to-read-first-n-lines-of-a-file-in-python/) 方法读取文件内容。这将保存到contents

下面一行使用 replace()并传递两(2)个参数:要搜索的文本('Fals' )和要替换的文本('Falls' )。结果保存在typos

💡注意: 使用with open() 是打开文件的推荐方法,因为一旦里面没有更多的代码行可以执行,文件就会自动关闭。

最后一步是以写(w )模式打开同一个文件(niagara.txt ),并将内容写入文件。

现在,niagara.txt 的内容应该如下所示。然而,改正后的错别字用粗体 字表示,以示改变。

尼亚加拉瀑布是位于尼亚加拉河上的一个瀑布,被认为是一个主要的旅游目的地和景点。瀑布 位于加拿大尼亚加拉瀑布和美国纽约州的边界。多年来,蜜月旅行者和敢死队都以非常不同的理由享受瀑布。敢死队最臭名昭著的把戏是
走钢丝
穿过瀑布
,或在桶里翻越瀑布
。现在,大多数人都是为了它惊人的美丽和独特性而来。

YouTube Video


方法2:使用pathlib2 replace()

这个方法需要一个额外的库。 [pathlib2](https://pypi.org/project/pathlib2/)来读取文件并使用它的 [replace()](https://pypi.org/project/replace/)函数替换现有文本。在这个例子中,每个出现的dare-dvls 都被替换为正确的拼写,即dare-devils

为了无误地运行这段代码,请安装所需的库。点击这里获取安装说明。

from pathlib2 import Path

myfile = Path('niagara.txt')
typos = myfile.read_text()
fixed = typos.replace('dare-devls', 'dare-devils')
myfile.write_text(fixed)

以上导入 [Path](https://pypi.org/project/path3/)[pathlib2](https://pypi.org/project/pathlib2/)库。

接下来,文件名niagara.txt 保存到myfile. 然后,这个文件的内容被读入并保存到typos

下面一行定位并将错别字dare-dvls 替换为dare-devils ,并将改动写入文件。

现在,niagara.txt 的内容应该如下所示。然而,改正后的错别字用粗体 字表示,以说明这些变化。

尼亚加拉瀑布是位于尼亚加拉河上的一个瀑布,被认为是一个主要的旅游目的地和景点。瀑布位于加拿大尼亚加拉瀑布和美国纽约州的边界。多年来,蜜月旅行者和敢死队都以非常不同的理由享受瀑布。敢死队最臭名昭著的把戏是
走钢丝
穿过大瀑布
或坐着木桶越过大瀑布。现在,大多数人都是为了它惊人的美丽和独特性而来。

现在看起来好多了!


方法3:使用pyutil和filereplace()

这个方法需要一个额外的库。 [pyutil](https://pyutil.readthedocs.io/en/latest/)来读取文件并使用它的 [`filereplace()`](https://pyutil.readthedocs.io/en/latest/)函数替换现有文本。在这个例子中,unmatched 这个词被替换为breathtaking

为了无差错地运行这段代码,请安装所需的库。点击这里获取安装说明。

from pyutil import filereplace
filereplace('niagara.txt', 'amazing', 'breathtaking')

上图从 [`filereplace()`](https://pyutil.readthedocs.io/en/latest/)[pyutil](https://pyutil.readthedocs.io/en/latest/)库。

接下来,读入文件niagara.txt 。搜索要替换的文本,如果找到,就用breathtaking 替换amazing

现在,niagara.txt 的内容应该如下所示。然而,变化是用粗体字 表示的,以说明这种变化。

尼亚加拉瀑布是位于尼亚加拉河上的一个瀑布,被认为是一个主要的旅游目的地和景点。瀑布位于加拿大尼亚加拉瀑布和美国纽约州的边界上。多年来,蜜月旅行者和胆大妄为者都以非常不同的理由享受瀑布。敢死队最臭名昭著的把戏是
走钢丝
穿过大瀑布
或坐着木桶越过大瀑布。现在,大多数人都是为了它那令人惊叹的
美丽和独特而来。

快到了!


方法4:使用open()和write()。

这个方法读入一个文件,在最后一行后添加一个新行,并保存文件。在这个例子中,Tristen Calwell的名字将被添加。

with open('niagara.txt','a') as fp:
        fp.write('\nBy: Tristen Callwell')

以上,使用with open ,打开niagara.txt ,在append(a )模式下,将其保存为一个文件对象。这个对象允许对文件进行访问和操作。

接下来,一个新的行(\n)和作者的详细信息被写入niagara.txt

niagara.txt 的内容现在看起来应该是这样的。然而,改正后的错别字用黑体字 表示,以说明这些变化。

尼亚加拉大瀑布是位于尼亚加拉河上的一个瀑布,被认为是一个主要的旅游目的地和景点。瀑布位于加拿大尼亚加拉瀑布和美国纽约州的边界。多年来,蜜月旅行者和敢死队都以非常不同的理由享受瀑布。最臭名昭著的是 敢死队的把戏是
走钢丝
穿过大瀑布
或在桶里翻越大瀑布。现在,大多数人都是为了它惊人的美丽和独特性而来。

作者:Tristen Callwell。Tristen Callwell

好东西啊!

YouTube Video


方法五:使用regex

这种方法使用regex来搜索和替换一个特定的词。在这个例子中,now 这个词被替换为lately这个词。

import re

with open('niagara.txt', 'r') as fp:
    data = fp.read()
    result = re.sub(r'now', 'lately', data)

with open('niagara.txt', 'w') as fp:
    fp.write(result)

上面导入了regex库。

以上,使用with open ,打开niagara.txt ,在读(r )模式下,将其保存为一个文件对象。这个对象允许对文件进行访问和操作。

下面几行是从niagara.txt ,并保存到data 。接下来,regex搜索并将单词now 替换为单词lately。这将保存到result

然后,文件niagara.txt 在写模式下被打开(w),并保存为文件对象。 最后,result 的内容被写入该文件。

现在,niagara.txt 的内容应该如下所示。然而,变化是用粗体字 表示的,以说明这些变化。

尼亚加拉大瀑布是位于尼亚加拉河上的一个瀑布,被认为是一个主要的旅游目的地和景点。瀑布位于加拿大尼亚加拉瀑布和美国纽约州的边界上。多年来,蜜月旅行者和敢死队都以非常不同的理由享受瀑布。最臭名昭著的是 敢死队的把戏是
走钢丝
穿过大瀑布
或坐着木桶越过大瀑布。现在,大多数人最近在
这里参观,因为它有惊人的美丽和独特之处。

By:Tristen Callwell

我们已经完成了,准备把文章交回给Tristen。

YouTube Video


摘要

这五(5)种更新和替换文件中的文本的方法应该给你足够的信息来选择最适合你的编码要求的方法。

祝您好运,编码愉快!


编程幽默