初学者在这里!请原谅我提出可能是一个非常简单的问题。
我一直在尝试整理一个Python脚本,该脚本在指定的纯文本文件上运行多个查找和替换操作以及一些类似的操作。它有效,但从编程的角度来看,我怀疑它运作良好。我如何才能最好地优化对'outtext'变量所做的操作?目前它基本上做了四次相似的事情......
import binascii
import re
import struct
import sys
infile = sys.argv[1]
charenc = sys.argv[2]
outFile=infile+'.tex'
findreplace = [
('TERM1', 'TERM2'),
('TERM3', 'TERM4'),
('TERM5', 'TERM6'),
]
inF = open(infile,'rb')
s=unicode(inF.read(),charenc)
inF.close()
# THIS IS VERY MESSY.
for couple in findreplace:
outtext=s.replace(couple[0],couple[1])
s=outtext
for couple in findreplace:
outtext=re.compile('Title: (.*)', re.I).sub(r'\\title'+ r'{\1}', s)
s=outtext
for couple in findreplace:
outtext=re.compile('Author: (.*)', re.I).sub(r'\\author'+ r'{\1}', s)
s=outtext
for couple in findreplace:
outtext=re.compile('Date: (.*)', re.I).sub(r'\\date'+ r'{\1}', s)
s=outtext
# END MESSY SECTION.
outF = open(outFile,'wb')
outF.write(outtext.encode('utf-8'))
outF.close()
答案 0 :(得分:4)
对于最后三个替换,for循环似乎是不必要的,因为循环体不使用循环变量。此外,没有必要将结果分配给临时outtext
变量,可以将其直接分配给s
。
这些更改使代码更加简洁:
for couple in findreplace:
s = s.replace(couple[0],couple[1])
s = re.compile('Title: (.*)', re.I).sub(r'\\title {\1}', s)
s = re.compile('Author: (.*)', re.I).sub(r'\\author {\1}', s)
s = re.compile('Date: (.*)', re.I).sub(r'\\date {\1}', s)
答案 1 :(得分:2)
一些可能性:
couple
变量。答案 2 :(得分:0)
你的代码并不是那么糟糕。如果你想优化速度,那么我会考虑在程序开始时编译你的正则表达式。
此外,如果你想整理你的代码,那么在一个循环中链接所有的潜艇。