我有多个文件,如下所示,需要循环查找并替换“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]
答案 0 :(得分:1)
您可以遍历文件中的每一行,并在=
之后进行替换。例如:
formatted_contents = ''
for line in open(r"sourcefile.txt"):
line_formatted = line.split('=')[-1].replace('TEXT', '**my_text**')
formatted_contents += line_formatted
这假设每行都有=
。如果不在每一行中,您可能希望为要执行的操作添加一些条件。
<强>更新强>
让我们一步一步地完成这一过程。
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
>>> 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
=
>>> 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']
=
方面的第二部分,因此我们将其切片为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
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
=
的正确后半部分,让我们在>>> 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
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)
$ 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正在发生什么。希望它有所帮助。