1.對json數組和json對象的操作
在python中,一個 Json 對象里面包含了很多信息,那么如何從這些數據中拿到我們想要的呢?
在之前的
python對象與json格式的數據類型轉化
一文中已經說明如何操作一個json對象,本文是再補充一個常見的還有處理 Json 數組 的。
python 的 json 模塊有兩個主要的函數。
1.python 對象轉化為 json格式:
json.dumps()
2.將json數據轉化為python對象:
json.loads()
就是:
1 import json 2 Json.dumps() # 將字典或列表轉為json格式的字符串 3 Json.loads() # 將json格式字符串轉化為python對象 4 Json.dump() # 將字典或列表轉為json字符串並且寫入到文件中 5 Json.load() # 從文件中讀取json格式字符串轉化為python對象
總之記住:
(帶s的都是對string操作,不帶s就是對txt之類的文件操作。)
再不明白的,具例子:
源碼:
1 """ 2 一、第一部分為: Json格式與python對象的相互轉換 3 """ 4 5 import json 6 7 # 普通的json單列表 8 jsondata = ''' 9 { 10 "Uin":0, 11 "UserName":"@c482d142bc698bc3971d9f8c26335c5c", 12 "NickName":"CSDNzoutao", 13 "HeadImgUrl":"https://blog.csdn.net/ITBigGod", 14 "DisplayName":"ZouTao", 15 "ChatRoomId":0, 16 "KeyWord":"che", 17 "EncryChatRoomId":"", 18 "IsOwner":0 19 } 20 ''' 21 22 myfriend = json.loads(jsondata) # json轉化字典對象 23 print(myfriend) 24 # 轉為字典以后,就可以根據key來獲取各種字段數值了 25 name = myfriend.get('NickName') 26 print(name) 27 # json.dumps(name) #將python對象轉化為json 28 29 # 常見的還有 Json 數組-嵌套型 30 Json_doc=''' 31 { 32 "MemberList": [{ 33 "UserName": "CSDNzoutao", 34 "Sex": "男", 35 "Age":10 36 }, 37 { 38 "UserName": "CSDNzoutao的1號女朋友", 39 "Sex": "女", 40 "Age":10 41 }, 42 { 43 "UserName": "CSDNzoutao的2號女朋友", 44 "Sex": "不限", 45 "Age":10 46 }] 47 } 48 ''' 49 50 myfriends = json.loads(Json_doc) 51 memberList = myfriends.get('MemberList') # 得到list對象-包含字典數據 52 print(memberList) 53 54 # 用個 for 循環就能輕而易舉的獲取數據 55 for x in memberList: 56 print('遍歷list數據:',x)
圖示:
2.python讀寫各類txt,csv,html,xls文件的工具類
以上面的那個json格式字符串和python對象為輸入數據memberList。
python讀寫各類txt,csv,html,xls文件的方式:
源碼:
1 ''' 2 二、第二部分為: python讀寫各類txt,csv,html,xls文件的方式 3 ''' 4 5 # 保存為txt文件 6 def output_txt(result): 7 print('數據類型為:',type(result)) # <class 'dict'> 8 with open('result.txt','a',encoding='utf-8') as f: 9 f.write(json.dumps(result,ensure_ascii=False)+'\n') # 將字典或列表轉為josn格式的字符串 10 11 # 讀取txt文件 12 with open("result.txt", "r", "utf-8") as f: 13 # 為a+模式時,因為為追加模式,指針已經移到文尾,讀出來的是一個空字符串。 14 ftext = f.read() # 一次性讀全部成一個字符串 15 ftextlist = f.readlines() # 一次性讀全部,但每一行作為一個子句存入一個列表 16 fline = f.readline() # 或者只讀取1行 17 print(ftextlist,fline) 18 f.close() # 關閉文件 19 ## 總結:以后讀寫文件都使用with open語句,不要再像以前那樣用f = open()這種語句了! 20 21 22 # 保存為html文件 23 def output_html(memberList): 24 print(type(memberList)) # <class 'list'> 25 fout = open('result.html', 'w', encoding='utf-8') 26 fout.write('<html>') 27 fout.write('<meta charset=utf-8') 28 fout.write('<body>') 29 fout.write('<table>') 30 31 # Python 默認編碼格式是: Ascii 32 for data in memberList: # result=list,data={} 33 fout.write('<tr>') 34 fout.write('<hr>') 35 fout.write('<td>%s</td>' % data['UserName']) 36 fout.write('<td>%s</td>' % data['Sex']) 37 fout.write('<hr>') 38 fout.write('</tr>') 39 fout.write('</table>') 40 fout.write('</body>') 41 fout.write('</html>') 42 fout.close() 43 44 # 保存為csv文件 45 def output_csv(datalist): 46 print(type(datalist)) # <class 'list'> 47 import csv 48 # 准備好存儲數據的csv文件 49 csv_file = open("result.csv", 'w', newline='', encoding='utf-8-sig') # 解決中文亂碼問題 50 writer = csv.writer(csv_file) 51 writer.writerow(['列標題一', '列標題二', '列標題三']) 52 for data in datalist: 53 writer.writerow([data['UserName'], data['Sex'],data['Age']]) 54 csv_file.close() 55 56 #用reder讀取csv文件 57 with open('result.csv','r') as csvFile: 58 reader = csv.reader(csvFile) 59 for line in reader: 60 print(line) 61 62 # 保存為xls文件 63 def output_xls(datalist): 64 print(type(datalist)) # <class 'list'> 65 import xlwt 66 # #創建工作簿 67 workbook = xlwt.Workbook(encoding='utf-8') 68 # 創建sheet 69 sheet = workbook.add_sheet(u'sheet1',cell_overwrite_ok=True) 70 head = ['名字', '性別', '年齡'] # 定義表頭 71 # worksheet.write()函數寫入第一行列名,參數分別表示行、列、數據、數據格式。 72 for h in range(len(head)): 73 sheet.write(0, h, head[h]) # 生成第0行標題 74 75 # 填入數據(第1行0列開始填數) 76 row = 1 77 for product in datalist: # 列表里面存了字典 78 sheet.write(row , 0, product['UserName']) 79 sheet.write(row , 1, product['Sex']) 80 sheet.write(row , 2, product['Age']) 81 row += 1 82 workbook.save('result.xls') 83 84 # 讀取excel數據 85 import xlrd 86 data = xlrd.open_workbook('result.xls') # 打開xls文件 87 table = data.sheets()[0] # 打開第一張表 88 nrows = table.nrows # 獲取表的行數 89 for i in range(nrows): # 循環逐行打印 90 if i == 0: # 跳過第一行 91 continue 92 print(table.row_values(i)) 93 94 95 # 示例調用 96 if __name__ == '__main__': 97 98 # memberList是一個列表,里面嵌入字典 99 output_html(memberList) 100 output_csv(memberList) 101 output_xls(memberList) 102 103 for result in memberList: 104 #print('篩選后的最終數據為:',result) 105 output_txt(result) # 生成器對象一遍歷出來就是字典。
生成的各類文件數據:
提醒!!! 以后在讀寫txt文件時,都使用with open語句,不要再像以前那樣用f = open()這種語句了!