将文件夹中一个子文件夹内的文件重命名为其父文件夹的名称?

3
我有一批以日期为基础命名的文件夹。每个文件夹都有一个子文件夹,其文件名全部相同。
是否有一种方法可以根据它们所在的目录结构(似乎是基于日期的第一个父文件夹)将这些文件重命名,使它们具备唯一性?
 \user\date\1_2_2019\ABC\0001.csv -> abc_1_2_2019.csv

 \user\date\1_3_2019\JKL\0001.csv -> JKL_1_3_2019.csv

 \user\date\1_4_2019\XYZ\0001.csv -> XYZ_1_4_2019.csv

 \user\date\1_5_2019\123\0001.csv -> 123_1_5_2019.csv

 \user\date\1_6_2019\456\0001.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代码可以将所有文件名更改为至少在名称开头添加父文件日期的名称?

提前致谢!


你尝试过使用 https://docs.python.org/3/library/os.html#os.rename 吗? - Gocht
1个回答

3

这里提供了一种方法,使用 Python 3.4+ 中的 pathlib 和 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\1_2_2019\ABC\1.csv
C:\Users\datanovice\Documents\Excels\2_2_2019\ABC\1.csv
#after
for f in files:
    print(f)
C:\Users\datanovice\Documents\Excels\1_2_2019\ABC\ABC_1_2_2019.csv
C:\Users\datanovice\Documents\Excels\2_2_2019\ABC\ABC_2_2_2019.csv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接