當前位置:首頁 » 編程語言 » pythonaddin

pythonaddin

發布時間: 2022-12-29 10:49:25

㈠ arcGIS 插件(add-in)開發的書,有哪本比較好

http://resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/#/Developing_with_ArcGIS/0001000001ww000000/
arcgis的幫助文檔是行業的典範,你如果使用c#開發addin 就看這個,我當初就是看的這個。如果使用python或者java直接返回上一級去找就是。不過是英文的。

㈡ xlwingsapi要如何導入

xlwingsapi要如何導入
起初我發現python的flask模塊結合excel函數WEBSERVICE,ENCODEURL可以實現在excel中調用python實現一些功能,比如md5,sha1加密,後來發現python可以直接用xlrd/xlwt這類模塊操作excel,但xlrd/xlwt連xlsx都不支持,便轉到了openpyxl,openpyxl的缺點是不能在文件打開狀態寫入,不好調試,文件被寫壞了都不知道。於是選擇了xlwings這個可以「代替VB成為Excel後台」的插件,個人認為差強人意,最大的缺點是官方文檔很多說的並不清楚
xlwings中文文檔
插件安裝:

xlwings安裝使用

安裝python
cmd:pip install xlwings
cmd:xlwings addin install
重啟excel可以在功能區看到xlwings一欄如圖
在這里插入圖片描述
建議是用cmd安裝,用戶文件夾名必須是英文不然xlwings addin install會報錯
ps:我安裝插件就花了一天,就因為上面這個。xlwings addin install一直失敗,網路搜索無果,(中途直接在github里下載插件,雖然插件導入成功,但導入函數會有關於pywin32報錯,這是我推薦cmd命令安裝的原因)查看報錯文件里代碼才定位問題,尋法修改為英文,不成,最後還是創建了一個英文賬戶(無奈~)
如果一切順利(希望如此) 基本上按照xlwings:操作Excel,通過宏調用Pyhton(VBA調Python)[@author qcyfred]一文所述就可以調用python來操作excel啦,
記錄我所遇到的坑:

RunPython ("from xw import say_hi; say_hi()")
1
1
!!!這我是在其評論區發現的(感謝@longnershot):vba中這段代碼里的xw是python文件名,要多加註意

解析json的python代碼

主要用到遞歸思想:

# -*- coding: utf-8 -*-
import
import itertools
import json
import urllib.request
import xlwings as xw
import json
from openpyxl.utils import get_column_letter

def pyFunc():
resp = urllib.request.urlopen(
"https://api.bilibili.com/x/v2/reply?pn=2&type=1&oid=455803935&sort=2")
pending_data = json.loads(resp.read())["data"]["replies"]

def getkey(data):
def get_tree_list(data, lst,tr_lsts):
for idx, item in enumerate(data) if isinstance(data, list) else data.items():
_lst = .deep(lst)
_lst.append(idx)
if (isinstance(item, dict) and item.keys()) or (isinstance(item, list) and len(item) > 0):
get_tree_list(item, _lst, tr_lsts)
else:
tr_lsts.append(_lst)
lst = []
tr_lsts = []
get_tree_list(data, lst, tr_lsts)
return tr_lsts
tl = []
for i in pending_data:
keys = getkey(i)
for j in keys:
jlen = len(j)
if len(list(filter(lambda x: len(x) >= jlen and x[:jlen] == j, tl))) == 0:
for m in range(jlen):
if j[0:m] in tl:
tl.remove(j[0:m])
tl.append(j)
tl.sort()

wb = xw.Book.caller()
sht = wb.sheets[0]

def get_tree_dict(ptl, ptree, pdlen,pcol, prow):
dst =[list(g) for k,g in itertools.groupby(ptl,lambda x:x[pdlen])]
ctree = ptree["child"] = {}
mlen = max(list(map(lambda x: len(x), ptl)))
st=pcol
cdlen = pdlen+1
for ctl in dst:
title = ctl[0][pdlen]
ctd = ctree[title] = {}
cmlen = max(list(map(lambda x: len(x), ctl)))
ccol=st
nst=st+len(ctl)
crow =prow+mlen-cmlen+1
ctd["start"] = get_column_letter(ccol)
ctd["end"] = get_column_letter(nst-1)
rg = sht.range(ctd["start"]+str(prow) +
":"+ctd["end"]+str(crow-1))
rg.merge()
rg.value = title
if cmlen >cdlen:
get_tree_dict(ctl, ctd, cdlen,ccol, crow)
st +=len(ctl)
ptree = {}
get_tree_dict(tl, ptree, 0, 1, 1)
def insertData(cdata, _ptree, xs):
for idx, item in enumerate(cdata) if isinstance(cdata, list) else cdata.items():
_ctree=_ptree["child"][idx]
if (isinstance(item, dict) and item.keys()) or (isinstance(item, list) and len(item) > 0):
insertData(item, _ctree,xs)
else:
ys=_ctree["start"]
ye=_ctree["end"]
rg = sht.range(ys+str(xs) +
':'+ye+str(xs))
rg.merge()
rg.value = str(item)
# if isinstance(item, str):
# rg.api.Font.Color = 0x0000FF #b/g/r
# elif isinstance(item, int):
# rg.api.Font.Color = 0xFF0000
# else:
# rg.api.Font.Color = 0x00FF00

tlmlen=max(list(map(lambda x: len(x),tl)))
for i,v in enumerate(pending_data):
insertData(v, ptree,

其中pending_data即為待處理的json,是一個dict列表[{},{},....]
wb = xw.Book.caller() sht = wb.sheets[0] 按照個人需要修改sht 如sht=wb.active等等
修改for idx, item in enumerate(cdata) if isinstance(cdata, list) else cdata.items()以及(isinstance(item, dict) and item.keys()) or (isinstance(item, list) and len(item) > 0)可以只對dict類型解析,list則直接轉str
調用range api,必須用字元串表示區間:range(「A1:D5」)有效,相對本與之等價的range((1,1),(5,4))無效,openpy.utils中的get_column_letter可以實現列數字轉列字元串
# if isinstance(item, str):
# rg.api.Font.Color = 0x0000FF #b/g/r
# elif isinstance(item, int):
# rg.api.Font.Color = 0xFF0000
# else:
# rg.api.Font.Color = 0x00FF00
1
2
3
4
5
6
1
2
3
4
5
6
尾述

㈢ 用python操作excel數據之避坑秘技

用python操作excel表裡的數據非常方便,可以把不同報表,不同類型的數據各種乾坤大挪移,匯集到一起進行展示。但初學者可能會遇到一些大坑,百思不得其解,而不得不放棄這個神器。現把我在自學過程中遇到的一些坑與大家分享,給初學者參考,歡迎批評指正!

坑一:用pandas的to_excel寫入EXCEL時,會把原數據清空。

解決方案:先用openpyxl的load_workbook打開工作薄,再用pandas的ExcelWriter新建寫入器,把之前打開的工作薄賦值給寫入器的工作薄。

坑二:把帶有公式的sheet1數據導入再寫入sheet2時,會發現帶公式的數據全部為空。

解決方案:可用win32com.client中的Dispatch把EXCEL表打開再保存。

坑三:當把復制文件,新建文件,打開保存文件,數據寫入都寫在一個程序時,往往由於EXCEL打開保存時間較長而與後續程序沖突報錯。

解決方案:每個環節建模塊順序執行,各環節間用time.sleep隔開。

㈣ arcgis Python載入項滑鼠事件

arcgisPython載入項滑鼠事件如下
載入項提供了一種向最終用戶分發自定義用戶界面的簡便方式。不需要安裝程序。只要將一個擴展名為.esriaddin的壓縮文件復制到一個已知文件夾中,其他工作交給ArcGIS來處理。為了能夠進一步簡化開發過程,ESRI還提供了一個Python載入項向導。你可以從Esri官網下載安裝向導。這也是本章要介紹的第一個案例。
我們還可以創建多個類型的載入項。按鈕和工具是最為簡單的載入項。點擊按鈕來執行業務邏輯操作。工具與按鈕非常相似,不過工具需要先與地圖窗口進行交互後再執行業務邏輯操作。組合框則提供了選項列表讓用戶進行選擇。

㈤ Visual Studio 2013 網頁安裝卡住

我今天也遇到了同樣的問題,官方的說法是可能是因為需要檢查系統最新的更新是不是都安裝了的關系...可是我已經等了1個小時了...

更新,現在裝好了,根據安裝日誌,就這一項大概裝了1小時15分鍾,這一個KB包含了59項更新

包含以下內容:
WinBlue_AppCertKitx64Patch,WinBlue_SDKStoreDXRem,WinBlue_SDKDXRem,WinBlue_SDKStore,WinBlue_SDK,PythonToolsTemplate_DevEnv,AppInsights,VS核心更新,TypeScript,TypeScript_SDK,CoreCon,WindowsPhone81SDK,WindowsPhone81SDK,PhoneAddon_SharedCore,PhoneAddon_SharedCoreRes,PhoneAddon_ProfessionalCore,PhoneAddon_ProfessionalCoreRes,MemoryProfiler_CORE,MemoryProfilerRes,BehaviorsXamlPhoneSDK,MobileTools_AddInCore,VC編譯器核心D11,VC庫核心D11,VC運行時調試D11,VS2012UnitTestsdk,MobileTools_AddInCoreres,VS2012UnitTestsdk_res,vc_compilerCoreResD11,,WP81XamlAdSDK,Preparation_InstallAdvertised,Preparation,EmulatorWP81BundleExeCache,sqldom_Sql2014,TSqlLanguageService_Sql2014,SSDTDBSvcExternals_Sql2014,sqllocaldb_Sql2014,sqlsysclrtypes_Sql2014,sharedmanagementobjects_Sql2014

項目眾多,我就不一一翻譯了,相信作為開發者的你基本上也看得懂

㈥ sparksql緩存表能做廣播變數嗎

共享變數
通常情況下,當向Spark操作(如map,rece)傳遞一個函數時,它會在一個遠程集群節點上執行,它會使用函數中所有變數的副本。這些變數被復制到所有的機器上,遠程機器上並沒有被更新的變數會向驅動程序回傳。在任務之間使用通用的,支持讀寫的共享變數是低效的。盡管如此,Spark提供了兩種有限類型的共享變數,廣播變數和累加器。

廣播變數
廣播變數允許程序員將一個只讀的變數緩存在每台機器上,而不用在任務之間傳遞變數。廣播變數可被用於有效地給每個節點一個大輸入數據集的副本。Spark還嘗試使用高效地廣播演算法來分發變數,進而減少通信的開銷。
Spark的動作通過一系列的步驟執行,這些步驟由分布式的洗牌操作分開。Spark自動地廣播每個步驟每個任務需要的通用數據。這些廣播數據被序列化地緩存,在運行任務之前被反序列化出來。這意味著當我們需要在多個階段的任務之間使用相同的數據,或者以反序列化形式緩存數據是十分重要的時候,顯式地創建廣播變數才有用。

通過在一個變數v上調用SparkContext.broadcast(v)可以創建廣播變數。廣播變數是圍繞著v的封裝,可以通過value方法訪問這個變數。舉例如下:

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)

在創建了廣播變數之後,在集群上的所有函數中應該使用它來替代使用v.這樣v就不會不止一次地在節點之間傳輸了。另外,為了確保所有的節點獲得相同的變數,對象v在被廣播之後就不應該再修改。

累加器
累加器是僅僅被相關操作累加的變數,因此可以在並行中被有效地支持。它可以被用來實現計數器和總和。Spark原生地只支持數字類型的累加器,編程者可以添加新類型的支持。如果創建累加器時指定了名字,可以在Spark的UI界面看到。這有利於理解每個執行階段的進程。(對於python還不支持)
累加器通過對一個初始化了的變數v調用SparkContext.accumulator(v)來創建。在集群上運行的任務可以通過add或者"+="方法在累加器上進行累加操作。但是,它們不能讀取它的值。只有驅動程序能夠讀取它的值,通過累加器的value方法。
下面的代碼展示了如何把一個數組中的所有元素累加到累加器上:

scala> val accum = sc.accumulator(0, "My Accumulator")
accum: spark.Accumulator[Int] = 0

scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
...
10/09/29 18:41:08 INFO SparkContext: Tasks finished in 0.317106 s

scala> accum.value
res2: Int = 10

盡管上面的例子使用了內置支持的累加器類型Int,但是開發人員也可以通過繼承AccumulatorParam類來創建它們自己的累加器類型。AccumulatorParam介面有兩個方法:
zero方法為你的類型提供一個0值。
addInPlace方法將兩個值相加。
假設我們有一個代表數學vector的Vector類。我們可以向下面這樣實現:

object VectorAccumulatorParam extends AccumulatorParam[Vector] {
def zero(initialValue: Vector): Vector = {
Vector.zeros(initialValue.size)
}
def addInPlace(v1: Vector, v2: Vector): Vector = {
v1 += v2
}
}

// Then, create an Accumulator of this type:
val vecAccum = sc.accumulator(new Vector(...))(VectorAccumulatorParam)
在Scala里,Spark提供更通用的累加介面來累加數據,盡管結果的類型和累加的數據類型可能不一致(例如,通過收集在一起的元素來創建一個列表)。同時,SparkContext..accumulableCollection方法來累加通用的Scala的集合類型。

累加器僅僅在動作操作內部被更新,Spark保證每個任務在累加器上的更新操作只被執行一次,也就是說,重啟任務也不會更新。在轉換操作中,用戶必須意識到每個任務對累加器的更新操作可能被不只一次執行,如果重新執行了任務和作業的階段。
累加器並沒有改變Spark的惰性求值模型。如果它們被RDD上的操作更新,它們的值只有當RDD因為動作操作被計算時才被更新。因此,當執行一個惰性的轉換操作,比如map時,不能保證對累加器值的更新被實際執行了。下面的代碼片段演示了此特性:

val accum = sc.accumulator(0)
data.map { x => accum += x; f(x) }
//在這里,accum的值仍然是0,因為沒有動作操作引起map被實際的計算.

㈦ 雲崽如何刪除插件

方法一:使用質感文件進入插件目錄Yunzai-Bot/plugins中手動進行刪除對應插件文件夾,可能會出現無法刪除文件夾情況,這時請退出termux運行或使用方法二。
方法二:在termux中的雲崽目錄下輸入rm-rf?plugins/xxx,此處xxx為插件文件夾的名稱,如miao-plugin與python-plugin,即為rm-rfplugins/miao-plugin與rm-rfplugins/python-plugin。
插件(Plug-in,又稱addin、add-in、addon或add-on,又譯外掛)是一種遵循一定規范的應用程序介面編寫出來的程序。

㈧ plugin是什麼文件夾

Plugin(Plug-in,addin,add-in,addon或add-on)是一種計算機應用程序,它和主應用程序(host application)互相交互,以提供特定的功能.可以說是一種插件。如果你在某個程序的文件夾下發現Plugin文件夾,那麼應該是這個程序的插件。

㈨ QT應用程序怎麼使用 plugin

Plugin(Plug-in,addin,add-in,addon或add-on)是一種計算機應用程序,它和主應用程序(host application)互相交互,以提供特定的功能。應用程序支持Plugin有許多原因,一些主要原因包括:使得第三方開發者有能力擴展應用程序,以提供無法先期預料的特色;減小應用程序的大小;由於軟體版權之間的不兼容性將源代碼和應用程序分享。
Plugin 通常譯作插件,下文中以插件代替Plugin。
支持插件的軟體例如有:
Email客戶端 使用插件對email編碼、解碼
圖像軟體 使用插件對文件格式進行支持和處理圖像(Adobe Photoshop,AcdSee)
媒體播放器 使用插件支持文件格式和應用過濾器(foobar2000,GStreamer,Quintessential,VST,Winamp,XMMS,WindowsMediaPlayer)
包嗅探器 使用插件對包的格式進行解碼 (OmniPeek)
遙感應用 使用插件處理不同類型感測器的數據(Opticks)
軟體開發環境 使用插件支持不同的編程語言(Eclipse,NetBeans,jEdit,MonoDevelop)
Web瀏覽器 使用插件播放視頻和媒體格式(Flash,QuickTime)
blog應用平台 使用插件增強blog功能(WordPress,LightPress,MovableType,Z-Blog)
blog終端 使用插件增加blog編輯功能(Windows Live Writer)
文件編輯器 使用插件提供特定的文本編輯能力(Emeditor,Notepad++)
編譯任務管理軟體 使用插件提供第三方語言支持或編譯任務支持(Ant)
企業Web應用平台 使用插件針對不同業務進行處理(Struts)
Plugin 架構
plugin 下包含有c++和jsp語法兩種語言分類
C++
FxEngine Framework - 一個數據流處理框架
Qt PlugIns - TrollTech的 Qt 框架的一部分
Delphi
TMS Plugin Framework
Java
Java Plug-in Framework (JPF),一種由Eclipse的插件機制而改寫的架構
RCP,由Eclipse發展而來的技術平台,應用程序可以以插件方式編寫,應用程序本身也可以擁有插件
Python
Setuptools
The Twisted Plugin System
Sprinkles
Python plugin system
.NET
AL Platform
Mono Addins - .Net和Mono的一個addin框架
Code Project 基於.NET的插件框架
Active Visic
Active Visic

熱點內容
不同域訪問 發布:2025-07-03 02:49:05 瀏覽:818
多槽編程 發布:2025-07-03 02:47:42 瀏覽:919
sql2008錯誤233 發布:2025-07-03 02:28:52 瀏覽:168
創建資料庫語句mysql 發布:2025-07-03 02:14:34 瀏覽:146
python量化投資 發布:2025-07-03 02:05:11 瀏覽:804
proxy代理伺服器地址 發布:2025-07-03 01:56:52 瀏覽:910
ps選區存儲 發布:2025-07-03 01:55:21 瀏覽:842
sql2008連接數 發布:2025-07-03 01:55:20 瀏覽:246
androidstring 發布:2025-07-03 01:53:55 瀏覽:183
密碼sql注入 發布:2025-07-03 00:44:07 瀏覽:555