亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

一篇文章搞懂Python反斜杠的相關問題

瀏覽:72日期:2022-06-24 13:43:42

大家在開發Python的過程中,一定會遇到很多反斜杠的問題,很多人被反斜杠的數量搞得頭大。

首先我們寫一段非常簡單的Python代碼,它的作用是把一個字段先轉換為JSON格式的字符串,然后把這個字符串再轉換為JSON格式的字符串:

import json info = {’name’: ’kingname’, ’address’: ’杭州’, ’salary’: 99999}info_json = json.dumps(info) # 第一次轉換以后,打印出來print(info_json) info_json_json = json.dumps(info_json) # 第二次轉換以后,再打印出來print(info_json_json)

它的運行效果如下圖所示。

一篇文章搞懂Python反斜杠的相關問題

第一次,字典轉成JSON格式的字符串,只有中文杭州變成了Unicode編碼u676du5dde,其余地方沒有出現反斜杠。

在Python里面,反斜杠不能單獨出現,這里u676du5dde中的兩根反斜杠,實際上應該是u。表示這兩個編碼是Unicode編碼。

接下來,把第一次生成的JSON字符串:{'name': 'kingname', 'address': 'u676du5dde', 'salary': 99999}再一次轉成JSON格式的字符串,這一次變成了:

'{'name': 'kingname', 'address': 'u676du5dde', 'salary': 99999}'

為什么突然出現了這么多反斜杠?這是因為,JSON格式的字符串本身是使用雙引號來表示字符串的。如果原來的字符串里面本身就有雙引號,那就會導致混淆。此時,Python需要把原來字符串的雙引號變成普通的字符,失去雙引號的作用。因此使用'讓雙引號變成普通的字符。

這就相當于在Python中,可以這樣定義一個包含雙引號的字符串:

>>> a = '跟我說:'你好''>>> print(a)跟我說:'你好'

這里,你好兩側的雙引號都加上了反斜杠,讓它成為普通的字符,防止它們提前與最外層的雙引號配對。

如果不加反斜杠,就會導致字符串里面的雙引號提前與外層的雙引號配對,引起語法錯誤:

>>> b = '跟我說:'你好'' File '<stdin>', line 1 b = '跟我說:'你好'' ^SyntaxError: invalid syntax

這里,'跟我說:'成為了一個字符串,末尾的''成為了一個空字符串。那么中間的你好就變成了一個沒有定義的變量。而Python里面,是不存在字符串未定義的變量字符串這種寫法的,所以會報語法錯誤。

而JSON格式的字符串,本質上也是字符串,所以自然而然也需要遵循這樣的規則。因此,字符串原來自帶的雙引號左側就被加上了反斜杠。

那么,原來的u676du5dde為什么變成了u676du5dde?

這是因為,當第二次執行json.dumps的時候,傳入的參數是一個JSON格式的字符串,本質就是字符串。而一個字符串里面如果自帶反斜杠,那么JSON在對他再次轉換的時候,需要標記這是一個普通的字符串形式的反斜杠,不是一個有特殊意義的反斜杠,所以使用表示一個普通的反斜杠。

好了,那么你可以猜一下,如果把info_json_json再json.dumps一下會怎么樣?

會變成:

''{'name': 'kingname', 'address': 'u676du5dde', 'salary': 99999}''

為什么出現了三個反斜杠連用和四個反斜杠連用的問題?

實際上非常簡單,當你對info_json_json執行json.dumps的時候,Python是怎么轉換的?

我們來看:

'{'name': 'kingname', 'address': 'u676du5dde', 'salary': 99999}'

對字符串執行json.dumps的時候,記住一個關鍵方法——從左到右,一個字符一個字符的轉換。

1. 第一個字符是雙引號,所以變成'2. 第二個字符是{,不是特殊符號,保留3. 第三個字符是,把它變成4. 第四個字符是',把它變成'5. ……

全部執行完成了,由于這次轉換是把一個字符串轉換為JSON格式的字符串,所以最外側加上雙引號。

于是就得到了:

''{'name': 'kingname', 'address': 'u676du5dde', 'salary': 99999}''

我們在爬蟲開發過程中,可能會遇到上面這種經過多次JSON轉換后的字符串,此時,千萬不要輕易使用字符串的.replace方法把多個反斜杠替換為空或者把兩個反斜杠替換為一個反斜杠。那樣做只會導致你的數據更難解析。

正確的做法應該是嘗試對數據一層一層使用json.loads,把它一層一層還原,還原到最初的{’name’: ’kingname’, ’address’: ’杭州’, ’salary’: 99999}這種簡單形式。

好了,今天的介紹就到這里,最后留一個思考題:

還是上面的代碼,現在把PyCharm的調試模式打開,然后數一數info_json和info_json_json里面反斜杠的個數,如下圖所示:

一篇文章搞懂Python反斜杠的相關問題

為什么在info_json里面,出現了u676du5dde,為什么在info_json_json里面雙引號前是兩根反斜杠,而'u676du5dde'竟然變成了'u676du5dde。

總結

到此這篇關于一篇文章搞懂Python反斜杠的文章就介紹到這了,更多相關Python反斜杠內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲国产精品婷婷久久久久 | 国产无套| 久久久久久久国产精品影院 | 日韩一区二区三区视频在线观看 | 色综合久久天天综线观看 | 澳门久久精品 | 国产成人精品在线观看 | 玖玖这里只有精品 | 国产高清一级毛片在线人 | 狠狠色欧美亚洲狠狠色五 | 久热久色| 国产午夜精品一区二区三区不卡 | 韩国免费毛片在线看 | 日韩亚洲欧美视频 | 99视频久久精品久久 | 色屁屁影院 | 日本高清在线精品一区二区三区 | 国产乱码精品一区二区三上 | 欧美日韩高清不卡免费观看 | 婷婷中文| 亚洲欧美日韩不卡一区二区三区 | 亚洲国产成人久久综合碰碰动漫3d | 一级黄色片美国 | 亚洲欧美一级久久精品 | 免费高清特级毛片 | 日本成a人片在线观看网址 日本成人一区二区 | 国产午夜精品久久久久免费视 | 久久综合狠狠综合久久综合88 | 91黄色片| 免费在线观看一区二区 | 老妇女性较大毛片 | 中日韩一级片 | 自拍偷拍1| 最新国产精品 | 91国内在线国内在线播放 | 91精品福利在线观看 | 欧美.成人.综合在线 | 国产精品第4页 | 欧美一级片毛片 | 亚洲国产第一区二区三区 | 一区二区三区福利视频 |