我有一个目录,其中有多个文件夹。
文件夹的名称是1,2,3,... 10。
这些文件夹中也有一些文件。
我想将名为topics
的文件重命名为子文件夹的名称。然后复制到存在1,2,3文件夹之前的一级。
例如:
dir1-> 1
topics
cd
2
topics
cd
3
topics
cd
我想在topics
中将1
的名称重命名为first one
topics
中的2
至second one
topics
中的3
至third 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
已重命名,然后被复制到后面一级
感谢您的帮助:)
答案 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)