如何查找和替换 Python 中每行特定字符后的文本?

How can I find and replace text after a specific character on each line in Python?

我有多个包含以下行的文件,需要循环查找并替换 "TEXT" 但仅在“=”

之后

static.TEXT.here=change.TEXT.here

这是我当前的代码,但我只能在“=”之后指定,因为需要替换的 "TEXT" 在所有文件中的位置不一致

import re
src = open(r"sourcefile.txt").read()
dest = open(r"destinationfile.txt","w")
dest.write( re.sub(currentText,replacementText,src, flags=re.I) )
dest.close()

编辑

我采取了一种略有不同的方法并导入了 csv 并使用“=”作为分隔符来创建单独的行,但现在很难整合我现有的 re.sub 代码来查找和替换文本、代码我正在使用相关行:

import csv
with open("sourcefile.txt", 'rb') as csvfile:
csvreader = csv.reader(csvfile, delimiter= '=')
for row in csvreader:
    if len(row) >1:
        print row[1]

您可以遍历文件中的每一行并在 = 之后进行替换。例如:

formatted_contents = ''
for line in open(r"sourcefile.txt"):
    line_formatted = line.split('=')[-1].replace('TEXT', '**my_text**')
    formatted_contents += line_formatted

这假设每行有一个 =。如果不是在每一行中,您可能想要为您想要执行的操作添加一些条件。

已更新

让我们一步一步来。

1。创建名为 sourcefile.txt 的文件,以便我可以测试过程

$ cat sourcefile.txt 
static.TEXT.here=change.TEXT.here
more.static.TEXT.here=change.TEXT.here.more
even.more.static.TEXT.here=change.TEXT.here.even.more

2。浏览文件并打印每一行以练习阅读 python

中的文件
>>> for line in open('sourcefile.txt'):
...     print line
... 
static.TEXT.here=change.TEXT.here

more.static.TEXT.here=change.TEXT.here.more

even.more.static.TEXT.here=change.TEXT.here.even.more

3。在 =

上分割文件内容
>>> for line in open('sourcefile.txt'):
...     print line.split('=')
... 
['static.TEXT.here', 'change.TEXT.here\n']
['more.static.TEXT.here', 'change.TEXT.here.more\n']
['even.more.static.TEXT.here', 'change.TEXT.here.even.more\n']

4。我们想取 = 边的第二部分,所以我们将它切片做 index[1]index[-1]

>>> for line in open('sourcefile.txt'):
...     print line.split('=')[-1]
... 
change.TEXT.here

change.TEXT.here.more

change.TEXT.here.even.more

5。将 TEXT 替换为 **MYTEXT**

>>> for line in open('sourcefile.txt'):
...     print line.split('=')[-1].replace('TEXT','**MYTEXT**')
... 
change.**MYTEXT**.here

change.**MYTEXT**.here.more

change.**MYTEXT**.here.even.more

6。现在我们有了 = 的正确后半部分,让我们将第一部分添加回

>>> for line in open('sourcefile.txt'):
...     print line.split('=')[0] + '=' + line.split('=')[-1].replace('TEXT','**MYTEXT**')
... 
static.TEXT.here=change.**MYTEXT**.here

more.static.TEXT.here=change.**MYTEXT**.here.more

even.more.static.TEXT.here=change.**MYTEXT**.here.even.more

7。最后,我们将其写入一个新文件

newfile=open('destinationfile.txt','w')
for line in open('sourcefile.txt'):
txt = line.split('=')[0] + '=' + line.split('=')[-1].replace('TEXT','**MYTEXT**')
    print txt
    newfile.write(txt)

8。确认它看起来正确

$ cat destinationfile.txt 
static.TEXT.here=change.**MYTEXT**.here
more.static.TEXT.here=change.**MYTEXT**.here.more
even.more.static.TEXT.here=change.**MYTEXT**.here.even.more

上面的能不能再精简一下写得更好些?当然。可以使用正则表达式以更少的步骤完成上述任务吗?是的。但我已经包含了上述步骤,希望能逐步引导您完成整个过程,看看 python 发生了什么。希望对你有帮助。