将文件夹的文件夹中的文件重命名为其父文件夹?

rename a files within a folder of a folder to its parent folder?

我有一批文件夹的名称是根据日期命名的。每个文件夹都有一个文件夹,其中的文件名都是相同的。

有没有办法重命名文件,使它们根据它们所在的目录结构(显示为基于日期的父文件夹(第一个文件夹))变得独一无二。

 \user\date_2_2019\ABC[=10=]01.csv -> abc_1_2_2019.csv

 \user\date_3_2019\JKL[=10=]01.csv -> JKL_1_3_2019.csv

 \user\date_4_2019\XYZ[=10=]01.csv -> XYZ_1_4_2019.csv

 \user\date_5_20193[=10=]01.csv -> 123_1_5_2019.csv

 \user\date_6_20196[=10=]01.csv -> 456_1_6_2019.csv

我知道获取所有文件的基本 python 代码是这个

  import os
   for dirname, _, filenames in os.walk('\user\date'):
     for filename in filenames:
       print(os.path.join(dirname, filename))

但是有没有 python 代码来更改要添加的所有文件的名称至少在开头名称中包含父文件的日期。

提前致谢!

这是使用 python 3.4+ 的路径库和 python 3.6+

的 f-strings 的一种方式

首先你需要在顶级目录设置你的路径,这样我们就可以递归地找到所有的csv文件并用一个简单的for循环重命名。

from pathlib import Path

files = Path(r'C:\Users\datanovice\Documents\Excels').rglob('*.csv')
# remove 'r' string if you're on macos.

for file in files:
    parent_1 = file.parent.name
    parent_2 = file.parent.parent.name
    file.rename(Path(file.parent,f"{parent_1}_{parent_2}{file.suffix}"))
    print(f"{file.name} --> {parent_1}_{parent_2}{file.suffix}")
#1.csv --> ABC_1_2_2019.csv
#1.csv --> ABC_2_2_2019.csv

结果

for f in files:
    print(f)
C:\Users\datanovice\Documents\Excels_2_2019\ABC.csv
C:\Users\datanovice\Documents\Excels_2_2019\ABC.csv
#after
for f in files:
    print(f)
C:\Users\datanovice\Documents\Excels_2_2019\ABC\ABC_1_2_2019.csv
C:\Users\datanovice\Documents\Excels_2_2019\ABC\ABC_2_2_2019.csv