我正在嘗試將自定義檔案轉換為 JSON 以便于編輯。這是自定義代碼示例:
{
"#letter_a" "A"
"#letter_b" "B"
"#letter_c" "C"
"#letter_d" "D"
"#letter_e" "E"
"#letter_f" "F"
"#letter_g" "G"
"#letter_h" "H"
"#letter_i" "I"
"#letter_j" "J"
"#letter_k" "K"
"#letter_l" "L"
"#letter_m" "M"
}
我需要在鍵的末尾添加“:”,然后在行尾添加“,”。這是我嘗試過的代碼:
import in_place
with in_place.InPlace('english_m.lang', encoding="utf-8", backup='.bak') as file:
for line in file:
cumle = line.join(line.split('"', 2)[:2])
print(line.replace(cumle, cumle '":'), end='')
它不太好用,它總是洗掉檔案中的所有行。
我該如何解決這個問題,或者有什么方法可以將此檔案格式轉換為 JSON?
uj5u.com熱心網友回復:
in_place旨在用您寫入檔案的新內容替換原始內容。您的代碼中沒有write呼叫,因此您最終得到一個空檔案。
uj5u.com熱心網友回復:
您應該在虛擬示例行上嘗試您的決議命令,看看它們是否作業/不作業。我不會在這里這樣做,但我會向您展示一個希望對您有所幫助的示例。
以下是如何將檔案原位轉換為幾乎JSON的內容
with in_place.InPlace("english_lang.txt",encoding="utf-8", backup=".bak" ) as file:
for line in file:
try:
items = [item.strip() for item in line.split()]
assert len(items)==2
line = " " items[0] ": " items[1] ",\n"
except:
pass
file.write(line)
內容english_lang.txt是現在
{
"#letter_a": "A",
"#letter_b": "B",
"#letter_c": "C",
"#letter_d": "D",
"#letter_e": "E",
"#letter_f": "F",
"#letter_g": "G",
"#letter_h": "H",
"#letter_i": "I",
"#letter_j": "J",
"#letter_k": "K",
"#letter_l": "L",
"#letter_m": "M",
}
它不是 JSON,因為最后一個字典條目之后的尾隨逗號。
您仍然可以使用加載它ast
import ast
D = ast.literal_eval(open("english_lang.txt", "r").read())
# you can save this to json using json.dump , but that defeats the purpose of in_place
如果你想制作一個english_lang.txt可以通過 json 加載的 in-place eg D = json.load(open("english_lang.txt", "r")),那么你需要制作一個更復雜的in_place編輯器代碼版本;特別是洗掉 . 之后的最后一個逗號"M"。
uj5u.com熱心網友回復:
我不相信in_place與此相關。本質上,您正在撰寫自定義決議器。所以,如果輸入檔案的格式與問題中顯示的完全一樣,那么......
import json
CUSTOM_FILE = 'foo.txt'
JSON_FILE = 'foo.json'
with open(CUSTOM_FILE, newline='') as cf, open(JSON_FILE, 'w') as jf:
_dict = {}
next(cf)
for line in cf:
if line.startswith('}'):
break
k, v = line.split()
_dict[k.strip('"')] = v.strip('"')
json.dump(_dict, jf)
...之后, JSON_FILE 將是一個有效的 JSON,如下所示:
{
"#letter_a": "A",
"#letter_b": "B",
"#letter_c": "C",
"#letter_d": "D",
"#letter_e": "E",
"#letter_f": "F",
"#letter_g": "G",
"#letter_h": "H",
"#letter_i": "I",
"#letter_j": "J",
"#letter_k": "K",
"#letter_l": "L",
"#letter_m": "M"
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/518554.html
上一篇:來自資料框的自定義JSON格式
