2015-09-07 124 views
0

我在Python中有一個簡單的腳本,其中我試圖遍歷文件夾中的所有文件,並使用Notepad ++將它們更改爲UTF-8編碼。Notepad ++未定義Python腳本名'notepad'

import os; 
import sys; 
import Npp; 
Npp.editor.write('Starting\r\n') 
filePathSrc="C:\\SomePath" 
Npp.editor.write('FilePath: ' + str(filePathSrc) + '\r\n') 
try: 
    for root, dirs, files in os.walk(filePathSrc): 
     for fn in files: 
      if fn[-4:] == '.txt' or fn[-4:] == '.xml' or fn[-5:] == '.html': 
       notepad.open(root + "\\" + fn) 
       console.write(root + "\\" + fn + "\r\n") 
       notepad.runMenuCommand("Encoding", "Encode in UTF-8") 
       notepad.save() 
       notepad.close() 
       Npp.editor.write('Converted ' + str(fn)) 
except Exception as ex: 
    Npp.editor.write('Error occured\r\n') 
    Npp.editor.write(str(ex)) 

然而,當我點擊插件 - > Python的腳本 - >腳本 - > MySript,我得到的是:

Starting 
FilePath: C:\SomePath 
Error occured 
name 'notepad' is not defined 

當在網上搜索,我從來沒有發現任何人以相同的問題。所有類似的問題都是因爲人們試圖在Notepad ++之外運行腳本而引起的。但是,直接使用Notepad ++插件時出現錯誤。

+0

你認爲哪些東西被分配給'notepad'這個名字? –

+1

記事本定義在哪裏?或者'console'。不在您發佈的代碼中。 – mhawke

+0

我認爲它是在插件本身內定義的。代碼只是從這篇文章的修改https://pw999.wordpress.com/2013/08/19/mass-convert-a-project-to-utf-8-using-notepad/。 'console'或'notepad'這兩個名字在代碼中都沒有定義。 – Storm

回答

3

如記錄的here,editor,notepadconsole都是在模塊本身內定義的實例。

您可以用Npp.爲這些對象加上前綴,因爲您已經完成了editor。不建議的選項是執行from Npp import *而不是import Npp

你知道源文件的編碼嗎?如果是這樣,您可以使用Python將您的文件轉換爲UTF8編碼。

+0

謝謝,我在Python中是一個新手......爲了避免將來出現問題,我是否必須在調用其內部對象時明確聲明模塊名? – Storm

+1

@Storm:是的,這是做這件事的首選方式。原因是如果導入文件中的名稱與導入模塊或其他導入模塊的名稱衝突,則導入*會導致問題。例如。如果你在模塊'm'中有一個名爲'max()'的函數,並且你從'm導入了*',''max''將會從'm'中隱藏內建的'max()'函數。出於這個原因,最好導入模塊,或從模塊導入特定的名字,例如, '從Npp導入編輯器,控制檯,記事本'。 – mhawke