将模板文件复制到多个目录,根据目录查询模板文件以进行重命名

时间:2012-08-27 01:43:00

标签: python list rename

所以我对Python很新,我已经搜索了Web和堆栈溢出以获得简单的解决方案。我相信我遇到的解决方案可行。但是,我很难将其他人的解决方案应用到我需要的环境中。

我有一个模板文件,我已设法将其复制到我的“projStorage”变量的多个子目录中。

例如

+ proj\Storage\dir
   + Seq1
       + template.file >> which I want to rename to >> Seq1_stringHere.File
   + Seq2
       + template.file >> Seq2_stringHere.File
   + Seq3
       + template.file >> Seq3_stringHere.File

问题是我想根据刚刚复制到的目录重命名我的模板文件。为此,我正在做一个os.listdir(seqFileList),我希望它会返回一个包含每个模板文件的列表,这样我就可以重命名为Seq目录名+字符串格式。

我使用for循环完成了这个。现在我明白我的'seqFileList'正在为proj \ Storage \ Dir中的每个文件夹做一个listdir()并返回我的文件列表。 我已经看到了“扁平化列表”的解决方案,但我不太了解它是如何工作的。 打印seqFileList会返回类似的内容,

['Template.file']
['Template.file']
['Template.file']

当我想要的是

['Template.file','Template.file','Template.file',] 

所以我可以重命名为

['Seq01_strHere.File','Seq02_strHere.File','Seq03_strHere.File',]

另外我知道代码的重命名部分还没有实现,因为我不确定如何去做。我知道一个解决方案是os.rename()但是我不确定在哪里正确实现它。

我知道这个问题可能并不新鲜,对某些人来说非常简单。我并不想成为一个“帮助吸血鬼”,因为我真的想要为自己内化这些东西。所以请原谅我的新意。 任何和所有解决方案都表示赞赏。

为了清楚起见,我已经替换了文件路径和项目名称。

提前致谢。

import os, shutil

 projTemplate = 'Path\\To\\Template.file'

 projStorage = 'Proj\\Storage\\dir' 

 projSeqs = os.listdir(projStorage)

 for seqs in projSeqs:
  seqFileDir = os.path.join(projStorage, seqs)     
  shutil.copy2(projTemplate, seqFileDir)               
  seqFileList = os.listdir(seqFileDir)

  print seqFileDir

2 个答案:

答案 0 :(得分:1)

为什么不在您复制子文件夹中的模板时重命名它?

for seqs in projSeqs:
    seqFileDir = os.path.join(projStorage, seqs)
    seqFileTemplate = os.path.join(seqFileDir, '%s_stringHere.File' % seqs)
    shutil.copyfile(projTemplate, seqFileTemplate)
    shutil.copystat(projTemplate, seqFileTemplate)         

答案 1 :(得分:0)

import os,shutil
projTemplate = '/Path/To/Template.file'
projStorage = '/Proj/Storage/dir'
[shutil.copy2(projTemplate, os.path.join(projStorage,dir,dir+"_stringHere.file")) 
            for dir in os.listdir(projStorage)]