2013-07-18 58 views
0

我遇到了python的一些困难。 我有一个与ArcGIS一起使用的代码,它将文件名解析到数据库中,以返回相应的唯一ID并使用此唯一ID重命名该文件夹。 它以前工作良好,但我需要处理一些异常情况,例如在目录中已存在唯一标识以及目录上的操作已完成时。唯一的ID包含所有数字,所以我一直在尝试:Python:如何找到重复的文件夹名称并重命名它们?

elif re.findall('[0-9]', fn): 
Roll = string.join(string, "1") 
print (Roll) 
    os.rename(os.path.join(basedir, fn), 
       os.path.join(basedir, Roll)) 

它返回具有唯一ID的所有文件夹。我只是无法弄清楚如何获得特定文件夹名称在目录中出现的次数。

+1

为什么你需要一个计数?文件夹名称最多可以在给定目录中存在一次。使用'os.path.isdir()'或'os.path.exists()'。 – roippi

+0

对不起,如果文件夹ALREADY存在,并且现有的脚本输出相同的名称,我想用一个新名称重命名重复的文件夹,比如说这是一个重复的“923449039”,这样第二个实例将是“923449039_1” – GISKid

回答

0

我怀疑你正在做这样的难度比你自己更需要的,但回答您的问题直接:

folder_name_to_create = 'whatever' 

if os.path.exists(folder_name_to_create): 
    folder_name_to_create += '_1' 

如果您遇到名称冲突,我怀疑你需要看看你的“独特“命名算法,但也许我误解了你的意思。

+0

基本上,有人创建了一个与属性相关联的文件夹的目录,并将它们命名为地址。在我们的组织中,所有事情都由一个称为卷号的唯一ID完成。所以基本上我把文件夹的名字,通过我们的数据库运行它来获得卷#和重命名该文件夹,但可能有一些重复。 – GISKid

+0

@GISKid听起来像你的数据库也需要一些独特的约束。 – Keith

1

将名称添加到一个集合,然后检查它是否在集合中。

+0

我用set但是545文件夹,我得到的错误: 错误信息: :太多的值来解压 有什么可以处理更多的文件夹? – GISKid

+0

你正在返回一个比你所期望的更大的元组。 – Jiminion

+0

@GISKid这是一个完全不相关的错误。你能告诉我们哪里出现的代码? – Keith

0

执行此操作的一种方法可能如下:创建一个字典,其中的键是您的文件夹名称,并且与每个键关联的值是一个整数,即该名称的出现次数。每次处理文件夹时,都要适当地更新字典的键/值。在您添加了所有文件夹名称之后,请检查字典中的所有计数值,并且每当计数大于1时,您知道您有重复项。或者,如果您需要随时检测重复项,请检查密钥是否已存在。在这种情况下,你根本不需要这个值,你可以使用一个集合或列表而不是字典。

您可以使用collections.Counter来帮助你。您可以在this question中看到示例用法。让这个例子适应你的需求不应该太难。

希望这会有所帮助。