【问题标题】:rename a files within a folder of a folder to its parent folder?将文件夹的文件夹中的文件重命名为其父文件夹?
【发布时间】:2020-04-30 15:40:55
【问题描述】:

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

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

 \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 代码来更改要添加的所有文件的名称,至少在开头的名称中有父文件的日期。

提前致谢!

【问题讨论】:

标签: python pandas macos directory directory-structure


【解决方案1】:

这是使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    相关资源
    最近更新 更多