pythonlisttojson
A. python3 讀excel轉Json文件
from xlrd import *
import json
# 參考1-字典、列表轉JSON:https://www.cnblogs.com/longchang/p/10904850.html
# 參考2-JSON直接保存到文件:https://www.cnblogs.com/miyatest/p/9603897.html
# 從excel讀取數據存放到列表中
def readExcel():
keyData=[] # 定義空List,用於保存讀到的行數據
excelBook=open_workbook("data.xlsx") # 從當前目錄讀取《data.xlsx》文件
table=excelBook.sheet_by_name("data") # 從《data.xlsx》中找名為 data的sheet頁
rowNum=table.nrows # 獲取《data.xlsx》-->data頁中 行數
colNum=table.ncols # 獲取《data.xlsx》-->data頁中 列數
colName=table.row_values(0) # 取第一行數據,即列名,colName 是個List
# print(colName)
if rowNum<=1:
print("沒數據...") # 如果行數<=1,說明沒有數據,因第1行一般定義為列名
else:
for i in range(rowNum-1):
d={} # 定義空字典,用於存放獲取到數據
values=table.row_values(i+1) # 獲取每行的數據,values最終是個List
# print(values)
for x in range(colNum): # 每個列作為字典的一組數據
d[colName[x]]=values[x] # 用colName值作為字典的key,values值作業為字典的value
# print(d)
keyData.append(d) # 讀完一行數據保存到字典,再保存到列表
# print(keyData)
return keyData # 全部數據讀完並保存到列表後,返回
# 列表轉Json
def listToJson():
keyParam=readExcel() # 調用從excel讀取數據的函數,把數據保存到列表
CaseConfig=open("CaseConfig.json", mode="w+") # 創建json文件
CaseConfig.write('{\n"key":') # 往json文件中寫數據,先寫json的格式的{,和模塊名
# 把從excel讀取的數據轉成Json格式保存入 CaseConfig,indent=4是進行格式化,使json排版好看
json.mp(keyParam, CaseConfig, indent=4)
CaseConfig.write('\n}') # 往json文件中寫數據,寫結尾的 },寫前先換行
CaseConfig.close() # 關閉json文件,必要!!
if __name__ == '__main__': # 調試調用
listToJson()
B. Python中list的實現
原文鏈接
這篇文章介紹了Python中list是如何實現的。
在Python中list特別有用。讓我們來看下list的內部是如何實現的。
來看下面簡單的程序,在list中添加一些整數並將他們列印出來。
正如你所看到的,list是可以迭代的。
Python中list是用下邊的C語言的結構來表示的。 ob_item 是用來保存元素的指針數組,allocated是 ob_item 預先分配的內存總容量
讓我們來看下當初始化一個空list的時候發生了什麼 L = []
非常重要的是知道list申請內存空間的大小(後文用allocated代替)的大小和list實際存儲元素所佔空間的大小( ob_size )之間的關系, ob_size 的大小和 len(L) 是一樣的,而allocated的大小是在內存中已經申請空間大小。通常你會看到allocated的值要比 ob_size 的值要大。這是為了避免每次有新元素加入list時都要調用realloc進行內存分配。接下來我們會看到更多關於這些的內容。
我們在list中追加一個整數:L.append(1)。發生了什麼?調用了內部的C函數app1()
來讓我們看下 list_resize() , list_resize() 會申請多餘的空間以避免調用多次 list_resize() 函數,list增長的模型是:0, 4, 8, 16, 25, 35, 46, 58, 72, 88, …
開辟了四個內存空間來存放list中的元素,存放的第一個元素是1。你可以從下圖中看到L[0]指向了我們剛剛加進去的元素。虛線的框代表了申請了但是還沒有使用(存儲元素)的內存空間
現在我們在列表的第一個位置插入一個整數5:L.insert(1, 5),看看內部發生了什麼。調用了ins1()
當你彈出list的最後一個元素:L.pop()。調用listpop(), list_resize 在函數listpop()內部被調用,如果這時 ob_size (譯者註:彈出元素後)小於allocated(譯者註:已經申請的內存空間)的一半。這時申請的內存空間將會縮小。
Pop的時間復雜度是O(1)
Python list對象有一個方法可以移除一個指定的元素。調用listremove()。
切開list和刪除元素,調用了 list_ass_slice() (譯者註:在上文slice list between element's slot and element's slot + 1被調用),來看下 list_ass_slice() 是如何工作的。在這里,低位為1 高位為2(譯者註:傳入的參數),我們移除在1號內存空間存儲的數據5
Remove的時間復雜度為O(n)
文中list的sort部分沒有進行翻譯
核心部分
C. Python3 字元串str和列表list轉換
>>> str1 = "abcdefg"
>>> list1 = list(str1)
>>> print(list1)
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> str4 = "username=admin&passsword=123456"
>>> list4 = str4.split("&")
>>> print(type(list4))
<class 'list'>
>>> print(list4)
['username=admin', 'passsword=123456']
如果我們要對多個字元進行分割,那麼可以使用內置模塊 re.split() 方法。
>>> str5 = "username=admin&passsword=123456"
>>> import re
>>> list5 = re.split("&|=", str5)
>>> print(type(list5))
<class 'list'>
>>> print(list5)
['username', 'admin', 'passsword', '123456']
>>> import json
>>> str3 = '["aaa", "bbb", "ccc", "ddd"]'
>>> list3 = json.loads(str3)
>>> print(type(list3))
<class 'list'>
>>> print(list3)
['aaa', 'bbb', 'ccc', 'ddd']
>>> str2 = "['aaa', 'bbb', 'ccc', 'ddd']"
>>> list2 = eval(str2)
>>> print(type(list2))
<class 'list'>
>>> print(list2)
['aaa', 'bbb', 'ccc', 'ddd']
針對str2,json.loads()方法為何失靈了?
因為 json.loads() 將json格式字元串轉換為python對象,而按 json 的標准規范應該使用雙引號,如果使用單引號會導致報錯。
# 注意,轉換之後,雙引號會變為單引號
>>> list1 = ["aaa", 123, 'ccc', True]
>>> str1 = str(list1)
>>> print(type(str1))
<class 'str'>
>>> print(str1)
['aaa', 123, 'ccc', True]
>>> list3 = ['username=admin', 'passsword=123456']
>>> str3 = "&".join(list3)
>>> print(type(str3))
<class 'str'>
>>> print(str3)
username=admin&passsword=123456
# 這里列表中使用了單引號
>>> list4 = ['username=admin', 'passsword=123456']
>>> import json
>>> str4 = json.mps(list4)
>>> print(type(str4))
<class 'str'>
>>> print(str4)
["username=admin", "passsword=123456"]
Python3下字典、字元串及列表的相互轉換
D. python裡面list寫成json格式
提供一個思路(ps:本思路沒有具體實踐過,得靠你來完成啦!)
你可以將那幾個變數構造成一個json字元串,然後直接寫入文件。
all_the_text="{'gain':"+gain+",'Pot':"+Pot+",'Accel':"+Accel+",'Fullscale':"+Fullscale+",}"
python中寫入文件的過程如下:
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )
E. 如何把python裡面的list變成json對象
import json
file = open("your_file_name.txt", 'a') # 追加的方式寫入
your_dict = {}
your_dict['a'] = 0.123
your_dict['b'] = [1.1, 1.2, 1.3, 1.4, 1.5]
your_dict['c'] = 0.2
json_str = json.mps(your_dict, ensure_ascii=False) # 將字典裝化為json串
# ensure_ascii=False : 不用ascii,如果有中文的話,沒有就無所謂了
file.write(json_str+'\n')
拿去 不謝~
--------------------------------------------------------------------------------
輸出結果如下:
{"a": 0.123, "c": 0.2, "b": [1.1, 1.2, 1.3, 1.4, 1.5]}
--------------------------------------------------------------------------------------
就是不知道為什麼c在中間(0.0)
F. python json怎麼修改json數據
Json簡介:Json,全名 JavaScript Object Notation,是一種輕量級的數據交換格式。Json最廣泛的應用是作為AJAX中web伺服器和客戶端的通訊的數據格式。現在也常用於http請求中,所以對json的各種學習,是自然而然的事情。Python的官網網址:https://docs.python.org/2/library/json.html?highlight=json#mole-json
Json API 使用:python在版本2.6之前,是需要先下載包,安裝後才能使用的,有點類似現在的RF內使用SeleniumLibrary一樣。但是在2.6中,官方文檔(https://docs.python.org/2.6/whatsnew/2.6.html)明顯指出,「有一些重要的新的軟體包添加到了標准庫,比如multiprocessing 和json,但是跟python 3比,2.6的這些包不會引進更多的新功能。"於是安裝python2.6以上版本的童鞋,可以不需要下載json包,直接在所需的地方就import json 即可使用,在安裝目錄下的Lib 下,看到這兩個包(點進去仔細閱讀這些源碼,會有更多的收獲,)如下文所示: