我只想替換引號(hào)內(nèi) SQL 語(yǔ)句的 as, 而不影響引號(hào)外部的,下面是我的代碼,能匹配到,也能在控制臺(tái)顯示替換了,但就是沒(méi)法回寫(xiě)到文本里:
Str = ''' for(x as m){
"select t.id as t from user;"
}
for( z as C)
'''
m = re.findall('\"(.*?)(?<![^\\\\]\\\\)\"', Str, re.S)
for item in m :
rs = re.sub('as', 'bas', item)
print(rs)
上面這段程序也確實(shí)替換了,findall 把引號(hào)中的內(nèi)容都獲取了,替換后控制臺(tái)也打印出來(lái)了,但是怎么寫(xiě)回到源文件的原位置啊,求大神指點(diǎn)?
----- (編按: 下方是原問(wèn)者在評(píng)論中的補(bǔ)充)
感謝你的答案。我的方法已經(jīng)能替換掉,重點(diǎn)是:
我想把替換后的結(jié)果寫(xiě)回源文件里面下面是我的代碼。
我需要處理的是一堆文件夾里的一些 .txt 文本中,雙引號(hào)里的某幾個(gè)關(guān)鍵字,例如 select as,change 等。
import re, codecs, os
def scan_files(directory, prefix=None, postfix=None):
files_list = []
for root, sub_dirs, files in os.walk(directory):
for special_file in files:
if postfix:
if special_file.endswith(postfix):
files_list.append(os.path.join(root, special_file))
# print "i scan the file is:"+special_file +"\n"
elif prefix:
if special_file.startswith(prefix):
files_list.append(os.path.join(root, special_file))
else:
files_list.append(os.path.join(root, special_file))
return files_list
def replace1(result):
str = 'z90'
return str + result.group(1) + result.group(2)
def str_replace(files):
i = 0
for eachXLF in files:
i += 1
# if eachXLF.endswith('.php'):
# i += 1
print(i)
print("i scaned file is:" + eachXLF + "\n")
# print ( "open"+ i +"files:"+ eachXLF + "\n" )
openXLF = codecs.open(eachXLF, 'r+b', encoding='utf-8', errors='ignore')
XLF = openXLF.read()
m = re.findall('\"(.*?)(?<![^\\\\]\\\\)\"',XLF,re.S)
for item in m :
rs = re.sub('^SELECT','aaSELECT',item)
ri = re.sub('FROM','aaFROM',rs)
print(ri)
openXLF.seek(0)
openXLF.write(XLF)
openXLF.truncate()
# print(XLF)
openXLF.close()
def main():
path = 'E:/Pythons/uploads'
str_replace(scan_files(path, prefix=None, postfix='.txt'))
if name == '__main__':
main()借助一個(gè)函數(shù)來(lái)實(shí)現(xiàn)替換的操作
import re
Str = ''' for(x as m){
"select t.id as t from user;"
}
for( z as C)
'''
p = re.compile('\"(.*?)as(.*?)\"')
# 替換函數(shù),參數(shù)是一個(gè)Match對(duì)象,返回值是替換的結(jié)果。
def repl(m):
return '"' + m.group(1) + "bas" + m.group(2) +'"'
print p.sub(repl, Str)
運(yùn)行結(jié)果:
for(x as m){
"select t.id bas t from user;"
}
for( z as C)北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。