2012-04-05 13 views
1

ich versuche:Kopieren einer Datei an einen neuen Speicherort und Schrittdateiname, Python

  1. Schleife durch ein Bündel von Dateien
  2. nimmt einige Änderungen
  3. Kopieren Sie die alte Datei in einem Unterverzeichnis. Hier ist der Kicker Ich möchte die Datei im neuen Verzeichnis nicht überschreiben, wenn sie bereits existiert. (zB wenn "Dateiname.mxd" bereits existiert, dann kopieren und umbenennen zu "Dateiname_1.mxd". Wenn "Dateiname_1.mxd" existiert, dann kopiere die Datei als "Dateiname_2.mxd" und so weiter ...)
  4. speichern sie die Datei (aber nicht speichern a, a wie so nicht speichern, dass sie die vorhandene Datei überschrieben)

es etwas geht:

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() 

so, 2 Dinge, die ich zu tun beschlossen wurde um die Bandbreite der Dateien weit über das zu setzen, was ich jemals erwarten würde (50). Ich bin mir sicher, dass es eine bessere Möglichkeit gibt, dies zu tun, indem einfach zur nächsten Nummer erhöht wird, ohne einen Bereich festzulegen.

Die zweite Sache, wie Sie sehen können, ist, dass das Skript alles in der Reihe speichert. Ich möchte es nur einmal bei der nächsten Instanz von i speichern, die nicht auftritt.

Hoffnung macht das Sinn,

Mike

Antwort

0

Dank Maty Vorschlag oben, habe ich meine Antwort gefunden. Für diejenigen, die interessiert sind, ist mein Code:

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) 
4

Verwenden Sie eine while-Schleife statt einer for-Schleife. Verwenden Sie die while-Schleife, um das geeignete i zu finden, und speichern Sie anschließend.

Der Code/Pseudo-Code würde wie folgt aussehen:

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

Diese beiden Probleme beheben soll.

+0

Ich versuchte dies und es stürzt ab, wenn die Speicherung stattfindet. Nicht wirklich sicher warum ... – Mike

Verwandte Themen