亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python:從文件中讀取和替換字符串(帶有特殊字符)時出錯

Python:從文件中讀取和替換字符串(帶有特殊字符)時出錯

肥皂起泡泡 2021-06-10 18:12:04
a.json 文件:{  "a": "b",  "key": "graph: \"color\" = 'black' AND \"api\" = 'demo-application-v1' nodes",  "c": "d"}以下代碼我試過:string_to_be_replace = "abcd"string_to = "graph: \"color\" = 'black' AND \"api\" = 'demo-application-v1' nodes"string_to_be_identified = "\"color\" = \'black\' AND \"api\" = \'demo-application-v1\'"string_to_be_identified1 = '"color" = \'black\' AND "api" = \'demo-application-v1\''print string_to_be_identifiedprint string_to_be_identified1print string_to.replace(string_to_be_identified1,string_to_be_replace)print string.replace(string_to, string_to_be_identified,string_to_be_replace)輸出:"color" = 'black' AND "api" = 'demo-application-v1'"color" = 'black' AND "api" = 'demo-application-v1'graph: abcd nodesgraph: abcd nodes這工作正常并按預期替換字符串但是當我嘗試以下方法時不是方法一:以讀取模式打開文件,逐行獲取并替換字符串with open(path + '/a.json', 'r') as file:    read_lines = file.readlines()    for line in read_lines:        print line.replace(string_to_be_identified,string_to_be_replace)file.close()輸出:{  "a": "b",  "key": "graph: \"color\" = 'black' AND \"api\" ='demo-application-v1' node",  "c": "d"}方法二:以閱讀模式打開文件,由于文件 a.json 有 JSON 數據,加載 JSON 文件,將 JSON 對象轉換為 JSON-string,然后替換它。代碼: with open(path + '/a.json', 'r') as file:    loadedJson = json.load(file)    print "z: " + str(loadedJson).replace(string_to_be_identified, string_to_be_replace)file.close()輸出:z: {u'a': u'b', u'c': u'd', u'key': u'graph: "color" = 'black' AND "api" = 'demo-application-v1 '節點'}方法三:我假設 JSON 字符串中的 Unicode 字符可能會產生問題,因此將 Unicode 字符串轉換為普通字符串,然后嘗試替換字符串輸出:a: {'a': 'b', 'c': 'd', 'key': 'graph: "color" = 'black' AND "api" = 'demo-application-v1' node'}蟒蛇版本:2.7.15使用來自 SO 答案之一的 byteify 代碼。JSON 文件很大,無法進行手動搜索和替換。在上面的例子中仍然嘗試過的python中的 ' 和 " 沒有區別。
查看完整描述

1 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

雖然我當然不建議在 JSON 等層次結構中進行任何類型的上下文無關搜索和替換,但您的主要問題是您在 JSON 文件中搜索的字符串已轉義引號(文字\字符),因此您必須考慮如果您想進行純文本搜索,也適用于那些。您可以使用原始字符串或自己添加反斜杠,例如:


str_search = r"graph: \"color\" = 'black' AND \"api\" = 'demo-application-v1'"

# or, if you prefer to manually write down the string instead of declaring it 'raw':

# str_search = "graph: \\\"color\\\" = 'black' AND \\\"api\\\" = 'demo-application-v1'"

str_replace = "abcd"


with open("/path/to/your.json", "r") as f:

    for line in f:

        print(line.replace(str_search, str_replace))

其中,對于您的 JSON,將產生:


{


  "a": "b",


  "key": "abcd 節點",


  “c”:“d”


}

(由 增加了額外的新行print)。


查看完整回答
反對 回復 2021-06-22
  • 1 回答
  • 0 關注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號