Onclickイベントを使用していくつかのファイルパスを取得するコードを書いています。これらのファイルパスがリテラルであることを確認して、コードの残りの部分を実行できるようにする必要があります。今、私はファイルパスをユニコードとして取得していると思います。基本的に私はこれが必要です:
u"File\location\extra\slash"
これになるために:
r"File\location\extra\slash"
どうすればよいですか?私は実際にこれを成功させることができた人を見つけることができませんでした、そしてドキュメントはこれの例を持っていません。ファイルパスのOnclickイベントを提供する関数の動作を変更することはできません。
問題のコードは次のとおりです。
class SetLayer(object):
"""Implementation for leetScripts_addin.button2 (Button)"""
def __init__(self):
self.enabled = True
self.checked = False
def onClick(self):
self.a = pythonaddins.GetSelectedCatalogWindowPath()
print self.a
#code split up path here
self.b = os.path.split(str(self.a))
self.c = self.b[0]
self.d = os.path.split(self.c)
self.e = (self.b[1])
self.f = (self.d[1])
self.g = (self.d[0])
あなたのコメントからは、あなたが持っているa = u'File\\location\\extra\\slash'
、とあなたは、抽出したいe = 'slash'
、f = 'extra'
とg = 'File\location'
。ここでは、文字列を文字列リテラルに変換する必要はありません。さまざまなレベルの文字列のエスケープに本当に混乱しました。
あなたはかどうかを決定する必要がありますe
、f
と、g
Unicode文字列またはバイト文字列でなければなりません。Unicode文字列はおそらく正しい選択ですが、私はあなたのためにその選択をすることはできません。どちらを選択する場合でも、Unicode文字列とバイト文字列のどちらを扱っているかを常に把握しておく必要があります。現在、a
はUnicode文字列です。
あなたがのためにUnicode文字列をしたい場合はe
、f
、そしてg
、あなたが行うことができます
self.e, temp = os.path.split(self.a)
self.g, self.f = os.path.split(temp)
バイト文字列が必要な場合はself.a
、適切なエンコードでエンコードしてから、上記のos.path.split
呼び出しを行う必要があります。適切なエンコーディングは、特定のOSとアプリケーションによって異なります。sys.getfilesystemencoding()
または'utf-8'
おそらく選択肢です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加