将文件复制到新位置并增加文件名python

时间:2012-04-05 21:46:04

标签: python auto-increment

我想:

  1. 循环浏览一堆文件
  2. 进行一些更改
  3. 将旧文件复制到子目录。如果已存在,我不想覆盖新目录中的文件。 (例如,如果“Filename.mxd”已存在,则复制并重命名为“Filename_1.mxd”。如果存在“Filename_1.mxd”,则将文件复制为“Filename_2.mxd”,依此类推......)
  4. 保存文件(但执行保存,而不是保存,以便覆盖现有文件)
  5. 它是这样的:

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

    所以,我决定做的两件事就是设置文件的范围远远超出我预期的范围(50)。我确信有更好的方法,只需在不设置范围的情况下递增到下一个数字。

    正如您所看到的,第二件事是脚本会保存范围内的所有内容。我只想在下一个没有发生的i实例上保存一次。

    希望这是有道理的,

    麦克

2 个答案:

答案 0 :(得分:4)

使用while循环而不是for循环。使用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

这应解决这两个问题。

答案 1 :(得分: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)