0

次のコードは、後の出力も同様に保存できるように、出力フォルダーをグローバルとして宣言する必要がある最初のステップを示しています。現在、出力フォルダー文字列 r'optfile/ras1' でエラーが発生しています。ファイルを出力フォルダーに正しく保存し、それをグローバルとして宣言する方法については、助けていただければ幸いです。

import arcpy
import os
import pythonaddins

from datetime import datetime

now = datetime.now()
month = now.month
year = now.year

optfile = "C:/temp/"+str(year)+"_"+str(month)

class DrawRectangle(object):
"""Implementation for rectangle_addin.tool (Tool)"""
    def __init__(self):
        self.enabled = True
        self.cursor = 1
        self.shape = 'Rectangle'
        os.makedirs(optfile)        

    def onRectangle(self, rectangle_geometry):
    """Occurs when the rectangle is drawn and the mouse button is released.
        The rectangle is a extent object."""

        extent = rectangle_geometry
        arcpy.Clip_management(r'D:/test', "%f %f %f %f" %(extent.XMin, extent.YMin, extent.XMax, extent.YMax), r'optfile/ras1', "#", "#", "NONE")
        arcpy.RefreshActiveView()
4

1 に答える 1

1

値が変数を使用しないことを意味していると思います。これは、Python が魔法のようにユーザーの心を読んで、たまたま変数名に一致する文字列の一部を置き換えないためです。r'optfile/ras1'optfile

変数を部分optfileと連結して、変数を明示的に使用する必要があります。/ras1

    arcpy.Clip_management(
        r'D:/test',
        "%f %f %f %f" %(extent.XMin, extent.YMin, extent.XMax, extent.YMax),
        optfile + '/ras1', "#", "#", "NONE")

または、さらに良いことに、os.path.join()関数を使用してパス区切り記号を処理します。

import os.path

# ...

    arcpy.Clip_management(
        r'D:/test',
        "%f %f %f %f" %(extent.XMin, extent.YMin, extent.XMax, extent.YMax),
        os.path.join(optfile, 'ras1'), "#", "#", "NONE")

あなたの問題はグローバル変数とは何の関係もないことに注意してください。これは、連結したい変数がどこから来るかに適用されます。

于 2013-01-26T15:41:17.997 に答える