根据文件路径重命名和移动文件
我想根据文件所在的路径来重命名文件,然后把重命名后的文件移动到一个特定的文件夹里(根据文件名来决定)。
举个例子,我有一个文件在路径 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 这个文件会被重命名为 "x y z";L:\a\b\c\q\r\s\file.pdf 会被重命名为 "q r s";等等。
然后,我想把这些文件根据它们的名字移动到一个已经存在的新文件夹里。比如说,文件 "d e f" 我希望移动到 L:\a\b\1\d\f\e。
我对 Python 编程还很陌生,虽然我有一些思路,但遇到了很多困难。这是我写的一些代码,不过我觉得可能用处不大。
在这段代码中,我需要把文件放到 CMD 里和 .py 文件一起运行。它能输出我想要的名字(不过多了些我不想要的空格),但并没有真正重命名文件,而且只针对我放到 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 个回答
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