1

私は。。をしようとしています:

  1. 一連のファイルをループする
  2. いくつかの変更を行います
  3. 古いファイルをサブディレクトリにコピーします。新しいディレクトリにファイルが既に存在する場合、そのファイルを上書きしたくないキッカーは次のとおりです。(たとえば、「Filename.mxd」が既に存在する場合は、コピーして「Filename_1.mxd」に名前を変更します。「Filename_1.mxd」が存在する場合は、ファイルを「Filename_2.mxd」としてコピーします...)
  4. ファイルを保存します (ただし、既存のファイルを上書きするために、名前を付けて保存するのではなく、保存します)

次のようになります。

for filename in glob.glob(os.path.join(folderPath, "*.mxd")):
    fullpath = os.path.join(folderPath, filename)

    mxd = arcpy.mapping.MapDocument(filename)

    if os.path.isfile(fullpath):
        basename, filename2 = os.path.split(fullpath)


    # Make some changes to my file here

    # Copy the in memory file to a new location. If the file name already exists, then rename the file with the next instance of i (e.g. filename + "_" + i)

    for i in range(50):
        if i > 0:
            print "Test1"
            if arcpy.Exists(draftloc + "\\" + filename2) or arcpy.Exists(draftloc + "\\" + shortname + "_" + str(i) + extension):
                print "Test2"
                pass
            else:
                print "Test3"
                arcpy.Copy_management(filename2, draftloc + "\\" + shortname + "_" + str(i) + extension)
    mxd.save()

そのため、私がやろうと決めた 2 つのことは、ファイルの範囲を、私が予想する範囲 (50) をはるかに超えて設定することでした。範囲を設定せずに次の数値にインクリメントするだけで、これを行うより良い方法があると確信しています。

2 つ目は、ご覧のとおり、スクリプトが範囲内のすべてを保存することです。発生しない i の次のインスタンスで一度保存したいだけです。

これが理にかなっていることを願って、

マイク

4

2 に答える 2

4

for ループの代わりに while ループを使用します。while ループを使用して適切な i を見つけ、後で保存します。

コード/疑似コードは次のようになります。

result_name = original name
i = 0
while arcpy.Exists(result_name):
    i+=1
    result_name = draftloc + "\\" + shortname + "_" + str(i) + extension
save as result_name

これにより、両方の問題が修正されるはずです。

于 2012-04-05T22:19:21.587 に答える
0

上記の Maty の提案のおかげで、私は自分の答えを思いつきました。興味のある方のために、私のコードは次のとおりです。

    result_name = filename2
    print result_name
    i = 0

    # Check if file exists
    if arcpy.Exists(draftloc + "\\" + result_name):
        # If it does, increment i by 1
        i+=1
        # While each successive filename (including i) does not exists, then save the next filename
        while not arcpy.Exists(draftloc + "\\" + shortname + "_" + str(i) + extension):                
            mxd.saveACopy(draftloc + "\\" + shortname + "_" + str(i) + extension)            
    # else if the original file didn't satisfy the if, the save it.
    else:           
        mxd.saveACopy(draftloc + "\\" + result_name)
于 2012-04-10T16:37:36.640 に答える