所以我对 Python 还很陌生,我已经在网络和堆栈溢出中搜索了一个简单的解决方案。我确信我遇到了一个可行的解决方案。但是,我很难将其他人的解决方案实施到我需要的环境中。
我有一个模板文件,我设法将它复制到我的“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