我有一個以 JSON 結構撰寫但格式不正確的檔案。內容與此類似:
[{"key0":"value0" , "key1":"value1", "key2":"value2"}, {"key0":"value3", "key1":"value4", "key2:"value5"}, {"key0":"value6", "key1":"value7", "key2:"value8"}]
與之前在這里提出的許多問題不同,內容都在同一行,所以我試圖逐行閱讀代碼,但如果我使用 readline(),我會選擇整個內容。
我試圖只提取帶有括號的大括號 { } 之間的資訊,然后列印它們。我能夠打開檔案,但我發現很難找到從 { 開始并以 } 結束然后繼續尋找下一個 { 和 } 等的讀取方式。我真的不關心方括號,只關心大括號。此外,這些值的長度可能不同,因此我可以在括號后設定要讀取的多個字符,因為大多數時候每組括號都不同。
任何指導將不勝感激。
uj5u.com熱心網友回復:
import re
fileContent = "[{'key0':'value0' , 'key1':'value1', 'key2':'value2'}, {'key0':'value3', 'key1':'value4', 'key2':'value5'}, {'key0':'value6', 'key1':'value7', 'key2':'value8'}]"
pattern_with_braces = r'\{.*?\}'
pattern_without_braces = r'(?<=\{).*?(?=\})'
parts = re.findall(pattern_without_braces, fileContent)
uj5u.com熱心網友回復:
我建議您使用 regex 模塊來修改這些行,然后將它們轉換為字典:
import re
import json
with open("data.txt") as f:
lines = f.readlines()
for line in lines:
modified = re.sub(r"({|\s)\"(\w ):", r'\1"\2":', line)
dictionary = json.loads(modified)
print(dictionary)
在您的示例中,運行上面的代碼將導致如下結果:
[{'key0': 'value0', 'key1': 'value1', 'key2': 'value2'}, {'key0': 'value3', 'key1': 'value4', 'key2': 'value5'}, {'key0': 'value6', 'key1': 'value7', 'key2': 'value8'}]
此外,您將可以訪問該字典的鍵和值。
注意上面代碼中的“data.txt”檔案如下:
[{"key0":"value0" , "key1":"value1", "key2":"value2"}, {"key0":"value3", "key1":"value4", "key2:"value5"}, {"key0":"value6", "key1":"value7", "key2:"value8"}]
uj5u.com熱心網友回復:
嘗試使用json.loadsjsonPython 編碼器模塊中的“使用轉換表將 fp(支持 .read() 的文本檔案或包含JSON檔案的二進制檔案)反序列化為 Python 物件”的方法。
要解碼您的json字串:
import json
str_to_load = '[{"key0":"value0" , "key1":"value1", "key2":"value2"}, {"key0":"value3", "key1":"value4", "key2":"value5"}, {"key0":"value6", "key1":"value7", "key2:"value8"}]'
str_to_load = json.loads(str_to_load)
print(str_to_load[2]['key2'])
輸出:
value8
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/439309.html
上一篇:在application.yml的json回應中包含/排除屬性
下一篇:基于字串的Flutter過濾結果
