使用到的知識點:os模組執行linux指令、json.dump()、with open as f
程式碼實現
import sys
import os
import json
# 向json檔案file中新增內容data,其中data的型別為字典
def write_json(file, data):
# 如果檔案存在,則刪除
if (os.path.exists(file)):
os.system(f"sudo rm {file}")
print(f"檔案{file}刪除成功")
# 建立目標json檔案file,並賦予許可權
# 如果在root使用者執行,可以刪除sudo
# os.system():用於執行linux指令
os.system(f"sudo touch {file} && sudo chmod 777 {file}")
# 開啟檔案file
with open(file, 'r+', encoding='utf-8') as f:
# 把data資料寫入json檔案中
json.dump(data, f, ensure_ascii=False, indent=2)
print("檔案建立成功並且已寫入檔案!!!")
if __name__ == '__main__':
json_file = sys.argv[1]
data = {}
data['name'] = "張三"
data['age'] = 18
data['sex'] = "女"
data['score'] = {}
data['score']['語文'] = 89
data['score']['數學'] = 91
data['score']['英語'] = 98
write_json(json_file, data)
程式碼摘錄解讀
1、with open(file, 'r+', encoding='utf-8') as f:
也可以使用寫作f = open()。但是這樣的話,如果存在檔案異常時,檔案無法關閉。而這裡使用with的好處就是,即使開啟失敗,也可以自動執行f.close()來關閉檔案
常見檔案操作mode:
w: 只寫入,如果檔案已有內容,會先清除已有內容
r: 只讀
a: 追加內容,在已有檔案的末尾追加
r+: 用於讀寫,也會清除已有內容
這塊內容很好查詢,這裡就不多列舉了
2、json.dump(data, f, ensure_ascii=False, indent=2)
把內容data寫入使用open開啟的檔案f中
ensure_ascii=False:如果寫入中文漢字,會亂碼。加上這個引數後則不會亂碼
indent=2:如果沒有這個引數,則會把內容在一行顯示,不會換行和縮排;而這個引數的作用就是使寫入內容換行、縮排。方便閱讀
最終寫入效果