簡體   English   中英

請幫助我優化我的Python代碼

[英]Please help me optimize my Python code

初學者在這里! 請您原諒我提出的可能是一個非常簡單的問題。

我一直試圖將一個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()

對於最后三個替換,似乎不需要for循環,因為循環主體不使用loop變量。 同樣,也不必將結果分配給臨時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)

一些可能性:

  • 在循環外進行重新編譯。
  • 僅使用一個循環並在其中執行所有四項操作。
  • 使用一個正則表達式,它與“標題”,“作者”或“日期”匹配。
  • 不要在循環內執行最后三個替換,因為它們不使用couple變量。

您的代碼還不錯。 如果您想優化速度,那么我將在程序開始時考慮編譯您的正則表達式。

另外,如果您要整理代碼,則可以將所有子鏈接鏈接到一個循環中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM