python作文本內容指定區域字符串替換

需求:
        由於公司項目須要作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)
相關文章
相關標籤/搜索