Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否将文件夹中的文件重命名为其父文件夹?_Python_Pandas_Macos_Directory_Directory Structure - Fatal编程技术网

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

Python 是否将文件夹中的文件重命名为其父文件夹?,python,pandas,macos,directory,directory-structure,Python,Pandas,Macos,Directory,Directory Structure,我有一批文件夹的名称基于日期。每个文件夹都有一个文件夹,其中的文件名都相同 是否有方法根据文件所在的目录结构(显示的是基于日期的父文件夹(第一个文件夹))重命名文件,使其变得唯一 \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_

我有一批文件夹的名称基于日期。每个文件夹都有一个文件夹,其中的文件名都相同

是否有方法根据文件所在的目录结构(显示的是基于日期的父文件夹(第一个文件夹))重命名文件,使其变得唯一

 \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 3.4+中的pathlib和python 3.6中的f字符串的单向方法+

首先,您需要在顶级目录中设置路径,这样我们就可以递归地找到所有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