如何使用子文件夹的名称重命名,然后有效地在python中复制文件

时间:2018-08-20 03:42:17

标签: python list performance pandas file

我有一个目录,其中有多个文件夹。 文件夹的名称是1,2,3,... 10。 这些文件夹中也有一些文件。 我想将名为topics的文件重命名为子文件夹的名称。然后复制到存在1,2,3文件夹之前的一级。

例如:

dir1-> 1
         topics
         cd
       2
         topics
         cd
       3
         topics
         cd

我想在topics中将1的名称重命名为first one topics中的2second one topics中的3third one 还将最新更改的名称文件复制到dir1(位于文件夹1、2、3所在的一级目录中)。

我已经尝试过了:

for root, subdirs, files in os.walk(input_dir):
    for filename in files:
        #print(os.path.join(root, filename))
              if filename=='topics.csv':
                os.rename(os.path.join(root, filename), os.path.join(root, str(i)) + ".csv")
                shutil.move(os.path.join(root,str(i)), os.path.join(input_dir,str(i)))
                i = i+1

但这没用。

我的预期结果将是

dir1-> 1
       1.txt
         1.txt
         cd
       2
       2.txt
         2.txt
         cd
       3
       3.txt
         2.txt
         cd

此处1.txt = topics已重命名,然后被复制到后面一级 感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

这里是一个快速解答。尚未彻底测试,可能还有改进的空间

import os, shutil

input_dir = "/Users/Angela/test"
# Walk through all files in the directory that contains the files to copy
for root, dirs, files in os.walk(input_dir):

for filename in files:
    if filename == 'topics.csv':
        base = os.path.join(os.path.abspath(root))
        #Get current name
        old_name = os.path.join(base, filename)
        #Get parent folder
        parent_folder = os.path.basename(base)
        #New name based on parent folder
        new_file_name = parent_folder + ".csv" #assuming same extension
        new_abs_name = os.path.join(base, new_file_name) 
        #Rename to new name
        os.rename(old_name,new_abs_name)
        #Copy to one level up
        one_level_up = os.path.normpath(os.path.join(base, os.pardir))
        one_level_up_name = os.path.join(one_level_up, new_file_name)
        shutil.copy(new_abs_name,one_level_up_name)

enter image description here