需求:
由於公司項目須要作SEO優化,因此對項目中的各類長鏈接作優化,好比本文中提到的精簡路徑;以前已經批量吧文本的路徑名字等作過修改,這裏再也不贅述;這裏的問題是外部的路徑修改了,文本里調用到這些路徑也須要替換,這就是本文要作的。html
思路:
1>肯定須要替換的全部文件路徑;
2>確認全部須要替換的區域(這次工做特殊的地方,也下降了難度);
3>拿到要替換的字符串用用來替換的字符串,迭代替換就完成了。python
實現:
先從數據庫找到這批文件,其中作各類SQL統計,或者SQL字符串處理獲得以下結果sql
url、www_url是本次因爲路徑改動須要在文本中替換的字符串;
x是須要改動的文本路徑。shell
文本里的內容部分截圖以下:
(1)根據數據庫能夠獲取須要修改文本的路徑;
(2)根據數據庫能夠獲取用來替換的字符串;
(3)用python打開文本;
(4)獲取要替換的內容的座標(x,y),進而取出須要替換的字符串;
(5)而後用python調用shell腳本:sed -i "s/source/tagert/g" path。
下邊是具體實現腳本附上:數據庫
#!python # -*- coding: UTF-8 -*- import MySQLdb import os dbip = "192.168.0.1" dbuser = "root" dbpwd = r"123" dbdata = "zt" # 打開數據庫鏈接 db = MySQLdb.connect(dbip,dbuser,dbpwd,dbdata ) # 使用cursor()方法獲取操做遊標 cursor = db.cursor() try: # 執行sql語句 sqls="SELECT id,uri,www_uri,x from t_ztzsq1019;" cursor.execute(sqls) results = cursor.fetchall() except: print("讀取失敗") # 關閉數據庫鏈接 db.close() for row in results: id = row[0] uri = row[1] www_uri = row[2] www_uri_path = row[3] #url: "/content/3nsm181018/35324.html" uri = 'url: \\"' + uri + '\\"' uri = uri.replace('/', '\/') #wwwUrl: "/content/3nswww181018/35325.html" www_uri = 'wwwUrl: \\"' + www_uri + '\\"' www_uri = www_uri.replace('/', '\/') # 打開文件 fo = open(www_uri_path, mode='r+') # 讀取所有數據 p = fo.read() # 判斷起始點 source_top = p.find('var _detailsVar') print(source_top) # url起始 print(p.find('url', source_top)) url_top = p.find('url', source_top) # url結束 print(p.find(',', url_top)) url_end = p.find(',', url_top) # url結果 print(p[url_top:url_end]) url_source = p[url_top:url_end] # wwwUrl起始 print(p.find('wwwUrl', source_top)) wwwUrl_top = p.find('wwwUrl', source_top) print(p.find(',', wwwUrl_top)) wwwUrl_end = p.find(',', wwwUrl_top) print(p[wwwUrl_top:wwwUrl_end]) wwwUrl_source = p[wwwUrl_top:wwwUrl_end] fo.close() url_source = url_source.replace('"', '\\"') url_source = url_source.replace('/', '\/') wwwUrl_source = wwwUrl_source.replace('"', '\\"') wwwUrl_source = wwwUrl_source.replace('/', '\/') www_main = 'sed -i "s/' + url_source + '/' + uri + '/g" ' + www_uri_path wwwUrl_main = 'sed -i "s/' + wwwUrl_source + '/' + www_uri + '/g" ' + www_uri_path print(www_main) print(wwwUrl_main) #os.system(www_main) #os.system(wwwUrl_main)