如何在Python中的每一行上的特定字符后找到并替换文本?

时间:2016-12-14 01:30:15

标签: python regex csv case-insensitive

我有多个文件,如下所示,需要循环查找并替换“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]

1 个答案:

答案 0 :(得分: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正在发生什么。希望它有所帮助。