python - 根据文件路径重命名和移动文件

标签 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)'

然后,为了实际移动文件,我还没有编写任何代码 - 我很迷失。我知道这是一项艰巨的工作,但如果有人可以帮助我,我将不胜感激。

最佳答案

当我发现这篇文章搜索类似的 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

关于python - 根据文件路径重命名和移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14588591/

相关文章:

python - 将类及其函数传递给另一个类

PHP rename() from/tmp 抛出警告,尽管实际上有效

rename - 如何重命名 protected 对象条目

windows - 如何使用 CMD 将所有具有特定扩展名的文件从所有子目录移动到它们的父目录?

C - 使用递归函数将文件夹和子文件夹中的所有 wav 文件路径放入字符串数组中

python - 循环发送多个图像到 smtp 服务器

python - 单元测试中的模拟日志处理程序

python - Python 中的字符串除法

regex - 文件重命名正则表达式添加不需要的后缀

.htaccess - 使用 htaccess 删除子目录中的 codeigniter index.php