如何将祖父母文件夹名称附加到文件名?

2024-07-01 06:36:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个文件夹存在的目录,在每个文件夹中,一个文件存在于另一个文件夹中。下面是结构

C:\users\TPCL\New\20190919_xz.txt
C:\users\TPCH\New\20190919_abc.txt

目标:

我想重命名如下文件名:

C:\users\TPCL\New\20190919_xz_TPCL.txt
C:\users\TPCH\New\20190919_abc_TPCH.txt

我的方法:

for root,dirs,filename in os.walk('C\users\TPCL\New'):
     prefix = os.path.basename(root)
     for f in filename:
         os.rename(os.path.join(root,f),os.path.join(root,"{}_{}".format(f,prefix)))

上述方法产生以下结果:

C:\users\TPCL\New\20190919_xz_New.txt
C:\users\TPCH\New\20190919_abc_New.txt

所以问题是:如何得到父文件夹的名称得到附加,而不是父文件夹的名称?你知道吗


Tags: path方法intxt文件夹newforos
3条回答

您可以使用“\”分割路径字符串,然后倒数到将被视为祖父母的内容 任何给定文件的目录,然后附加它。例如,如果你有

filename = "dir1\dir2\file.txt"
splitPaths = filename.split('\') // gives you ['dir1', 'dir2', 'file.txt'] 

最后一项是文件名,倒数第二项是父项,倒数第三项是祖父母,依此类推。然后,您可以将任何想要的目录附加到字符串的末尾。你知道吗

使用来自^{}PurePath可以得到路径的各个部分。如果路径包含文件名,则其父文件夹将位于索引-3。你知道吗

In [23]: from pathlib import PurePath

In [24]: p = r'C:\users\TPCL\New\20190919_xz_TPCL.txt'

In [25]: g = PurePath(p)

In [26]: g.parts
Out[26]: ('C:\\', 'users', 'TPCL', 'New', '20190919_xz_TPCL.txt')

In [27]: g.parts[-3]
Out[27]: 'TPCL'

如果路径不包含文件名,grand=parent将位于索引-2。你知道吗


您的流程如下所示:

import os.path
from pathlib import PurePath

for root,dirs,fnames in os.walk(topdirectory):
    #print(root)
    try:
        addition = PurePath(root).parts[-2]
        for name in fnames:
            n,ext = os.path.splitext(name)
            newname = n + '_' + addition + ext
            print(name, os.path.join(root,newname))
    except IndexError:
        pass

我添加了try/except来过滤出没有祖父母的路径-如果您知道不需要它,就不需要了。你知道吗

您需要同时使用dirname和basename来执行此操作。你知道吗

使用操作系统路径目录名获取目录名(不包括最后一部分)和
然后使用操作系统路径基名称获取路径名的最后一部分。你知道吗

替换 prefix = os.path.basename(root)

os.path.basename(os.path.dirname(root))

请参考:
https://docs.python.org/3.7/library/os.path.html#os.path.basenamehttps://docs.python.org/3.7/library/os.path.html#os.path.dirname

相关问题 更多 >

    热门问题