重命名&根据文件路径移动文件

时间:2013-01-29 17:23:07

标签: python rename subdirectory filetree

我正在尝试根据文件所在的树路径重命名文件,然后将重命名的文件移动到特定文件夹(基于其名称)。

所以,例如,我在路径L中有一个文件:\ a \ b \ c \ d \ e \ f \ file.pdf 我想将“file.pdf”重命名为“d e f”

此外,所有子文件夹在c处分支,因此我希望python扫描文件夹c中包含的子文件夹中的所有文档,以根据上述模式重命名。即,L:\ a \ b \ c \ x \ y \ z \ file.pdf,file.pdf重命名为“x y z”; L:\ a \ b \ c \ q \ r \ s \ file.pdf,file.pdf重命名为“q r s”;等

然后,我想根据其名称将所有这些文件移动到新的现有文件夹中。所以说例如文件“d e f”我想转移到L:a \ b \ 1 \ d \ f \ e。

我在使用Python进行编码时非常陌生,而且我有一些难题,但我遇到了很多麻烦。这是我的一些代码,但我认为它不会非常有用。

对于此代码,我必须使用.py文件将文件放入CMD。它吐出了我想要的名字(但是有额外的空间,我不想要),它实际上并没有重命名文件,而是只用我放入CMD的特定文件来完成,而我宁愿让代码通过所有子文件夹并自动执行。请注意,我的代码(特别是第6-7行)特定于我想要的文件夹实际命名的方式,为了保密原因我混淆了树路径的名称,它只是让它更容易理解。

from sys import argv
script, filename = argv
txt = open(filename)
print "Here's your file %r:" % filename
string = "%r" % filename
print string [94:-17]
line = string [94:-17]
line = "%r" % line
for char in '\\':
line = line.replace (char, ' ')
print line

做一些功课,这段代码将搜索并重命名我想要的目录中的所有文件,但是它没有按照我想要的方式命名。同样,这不是真的有用,但它就是我所拥有的。

import glob, os
def rename(dir, pattern, titlePattern):
for pathAndFilename in glob.iglob(os.path.join(dir, pattern)):
title, ext = os.path.splitext(os.path.basename(pathAndFilename))
os.rename(pathAndFilename,
os.path.join(dir, titlePattern % title + ext))
rename(r'L:\a\b\c\', r'*.pdf', r'new(%s)'

然后为了实际移动文件,我还没有制作任何代码 - 我很丢失。我知道这是很多工作,但如果有人能帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:1)

当我发现这篇文章为bash搜索类似的解决方案时,我会为那些遵循相同路径的人发布一个答案:

#!/bin/bash

mkdir extracted
for var in "$@"
do
    for f in `find sources -name "$var"`
    do
        groupname=`echo $f | cut -d'/' -f 3`
        filename=`echo ${f##*/}`
        cp "$f" extracted/"${groupname}_$filename" -v
    done
done
相关问题