如何查找和替换 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 发生了什么。希望对你有帮助。
我有多个包含以下行的文件,需要循环查找并替换 "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 发生了什么。希望对你有帮助。