因此,我对Python相当陌生,并且已经搜索了Web和堆栈溢出以获得简单的解决方案。我确信有一个我遇到的解决方案可以工作。然而,我很难将其他人的解决方案应用到我所需要的环境中。将模板文件复制到多个目录中,根据目录查询重命名的模板文件
我有一个模板文件,我已经设法复制到我的“projStorage”变量的多个子目录。
e.g
+ 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
copystat绝对是一个额外的好处。非常感谢!很容易理解。 –
我收录了它,因为我相信'shutil.copy2'做了'shutil.copy',所以我以为你一定是想要它:) –
真棒,我认为这就是它做的。谢谢你澄清。 :) –