標籤:set ddr 系統 需求 das ram enc tab temp
1.模組的選擇
python與c#互動目前有兩種方式,一種是使用ironpython模組,另一種是使用pythonnet模組。筆者推薦使用pythonnet,因為ironpython不支援c#中的一些模組,如比較有名的pandas,numpy等。
2.使用pythonnet
使用pip下載pythonnet模組,在安裝路徑下會有clr.pyd、python.Runtime.dll 兩個檔案,pyd檔案是在python指令碼中使用,而python.Runtime則是在c#程式中所調用的動態庫。(注意:下載的pythonnet模組、c#產生的系統位元和使用的IDE位元一致,如:都是x86,或者x64)
3.代碼
1 import sys 2 import os 3 sys.path.insert(0,os.path.abspath(‘./‘)) 4 5 import clr 6 clr.AddReference(‘System.Data‘) 7 8 from System import Data 9 from System.Data import DataSet10 from System.Data import DataTable11 from System.Data import DataColumn12 from System.Data import DataRow13 14 import pandas as pd15 import numpy as np 16 from pymongo import MongoClient17 import types18 import bson19 20 def TableToDataFrame(dt):21 ‘‘‘將DataTable類型轉換成DataFrame類型‘‘‘22 colTempCount = 023 dic={}24 while(colTempCount < dt.Columns.Count):25 li = []26 rowTempCount = 027 colName = dt.Columns[colTempCount].ColumnName28 while (rowTempCount < dt.Rows.Count):29 result = dt.Rows[rowTempCount][colTempCount]30 li.append(result)31 rowTempCount = rowTempCount + 132 33 colTempCount = colTempCount + 134 dic.setdefault(colName,li)35 36 df = pd.DataFrame(dic)37 return(df)38 39 def DataFrameToDic(df):40 ‘‘‘將DataFrame資料類型轉成字典類型‘‘‘41 dic = df.to_dict(‘list‘)42 return dic43 44 def CollenctionMongodb():45 dataTableList = []46 client = MongoClient(‘localhost‘,27017)47 db = client[‘資料庫名稱‘]48 c = db[‘表名稱‘]49 dataTableList.append(c)50 ds = DataSet(object)51 for dbTable in dataTableList:52 dt = DataTable(object)53 dbDR = dbTable.find_one()54 for dbTable in list(dbDR.keys()):55 dc = DataColumn(object)56 dc.ColumnName = a57 dt.Columns.Add(dc)58 59 for item in dbTable.find():60 li = []61 for b in list(item.values()):62 if types.IntType == type(b):63 li.append(b)64 elif types.StringType == type(b):65 li.append(b.encode("utf-8"))66 elif isinstance(b,bson.object.Object):67 pass68 else:69 li.append(b)70 71 dt.Rows.Add(li)72 ds.Tables.Add(dt)73 return ds 74 75 if __name__ == ‘__main__‘:76 ds.CollenctionMongodb()77
4、對代碼的解釋
以上是程式的主代碼,根據需求從mongodb中取出資料,並用python指令碼把資料轉換成c#裡的DataTable類型,再把C#中DataTable類型轉換成python 中的DataFrame,接下來就用python中的演算法函數來操作資料了,在這個項目中是把操作後的資料用python的字典類型回傳給c#程式。c#拿到的資料格式則是json字串,使用c#解析字串就能拿到相應的資料。
c#使用pythonnet.runtime.dll 動態庫,具體的使用方法在 pypi 下載pythonnet模組時,查看使用文檔會用詳細的用法解釋。
5、本作者部落格寫的比較少,寫作水平有待提高。因為文筆有限沒有對以上代碼進行逐句的解釋,對c#和python有瞭解的人看會輕鬆一些,還請讀者多多包涵,希望此文檔對讀者有一點啟發作用,若以上代碼有哪裡不懂的地方可以留言。
pythonnet模組的使用,把DataTable轉換成DataFrame