重命名子目录中的文件,其名称与文件夹

时间:2015-08-28 14:55:14

标签: python

这是我的困境。我想使用python递归遍历目录并将所有文件重命名为该文件夹的名称。我知道在使用各种编程(第三方软件,bash,windows命令行,perl)中已经被要求了很多(用于;追加,更改文本/扩展名),但我真的想在python中完成这项工作,我希望文件夹名称完全替换文件名。

我理解" dirname"在下面的代码中是文件夹名称,理想情况下我可以替换它:

dest =  root + '/' + dirname  + file

为此,假设#extension = os.path.splitext(file)[1]

dest =  root + '/' + dirname  + extension 

我不明白为什么这个替换不起作用。当我删除"文件"参考,我收到一个错误,告诉我这个文件已经存在。我也试过切片(文件[:10]),如果你确切地知道你需要替换多少个字符(我想限制硬编码),这是有效的。

目前:

C:\数据\ FolderA \ foo.txt的
C:\数据\ FolderB中\ foo.txt的

代码编写

C:\数据\ FolderA \ FolderAfoo.txt
C:\数据\ FolderB中\ FolderBfoo.txt

我需要什么

C:\数据\ FolderA \ FolderA.txt
C:\数据\ FolderB中\ FolderB.txt

import os
import ntpath

path = "C:\data"

#recursively walk through the directory to find folders
for root, dir, files in os.walk(path):
  #walk through the folders to find files
  for file in files:
   dirname = ntpath.basename(root)
    #original location
    ori = root + '/' + file
    #From location, adding the dirname ("FolderA") before the file name
    dest =  root + '/' + dirname  + file
    os.rename(ori, dest)

3 个答案:

答案 0 :(得分:0)

height contraint

答案 1 :(得分:0)

尝试以下方法:

import os

path = r"c:\data"

for path, sub_directories, files in os.walk(path):
    directory_name = os.path.split(path)[1]

    for file in files:
        extension = os.path.splitext(file)[1]
        source = os.path.join(path, file)
        destination = os.path.join(path, directory_name + extension)
        os.rename(source, destination)

答案 2 :(得分:0)

这应该很简单:

dest = root +'/'+ dirname +“/”+ dirname