2012-04-05 4 views
1

Je suis en train de:Copier un fichier vers un nouvel emplacement et le nom incrément, python

  1. boucle à travers un tas de fichiers
  2. fait quelques changements
  3. Copiez l'ancien fichier dans un sous-répertoire. Voici le kicker Je ne veux pas écraser le fichier dans le nouveau répertoire s'il existe déjà. (Par exemple, si "Filename.mxd" existe déjà, copiez et renommez "Filename_1.mxd" Si "Filename_1.mxd" existe, copiez le fichier sous "Filename_2.mxd" et ainsi de suite ...)
  4. enregistrer le fichier (mais faire enregistrer, pas enregistrer comme pour qu'il remplace le fichier existant)

il va quelque chose comme ceci:

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

alors, 2 choses que je décidé de faire, a été juste pour définir la plage de fichiers bien au-delà de ce que je m'attends à jamais (50). Je suis sûr qu'il y a une meilleure façon de procéder, en augmentant simplement le nombre suivant sans définir de plage. La deuxième chose, comme vous pouvez le voir, est que le script enregistre tout dans la plage. Je veux juste l'enregistrer une fois sur l'instance suivante de i qui ne se produit pas.

Hope this sens,

Mike

Répondre

0

Grâce à la suggestion de Maty ci-dessus, j'ai trouvé ma réponse. Pour ceux qui sont intéressés, mon code est:

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

Utilisez une boucle while au lieu d'une boucle. Utilisez la boucle while pour trouver le i approprié, puis sauvegardez ensuite.

Le code/pseudocode ressemblerait à ceci:

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

Cela devrait corriger les problèmes.

+0

J'ai essayé ceci et il se bloque quand la sauvegarde a lieu. Pas vraiment sûr pourquoi ... – Mike

Questions connexes