【问题标题】:Python loop through directoriesPython循环遍历目录
【发布时间】:2021-06-10 16:24:05
【问题描述】:

我正在尝试使用 python 库os 循环遍历根目录中的所有子目录,并以特定文件名为目标并重命名它们。 只是为了说清楚这是我的树结构

我的 python 文件位于根目录。

我想要做的,是以目录942ba为目标循环遍历所有子目录并找到文件000000并将其重命名为000000.csv

我目前的代码如下:

import os


root = '<path-to-dir>/942ba956-8967-4bec-9540-fbd97441d17f/'
for dirs, subdirs, files in os.walk(root):
    for f in files:
        print(dirs)
        if f == '000000':
            dirs = dirs.strip(root)
            f_new = f + '.csv'
            os.rename(os.path.join(r'{}'.format(dirs), f), os.path.join(r'{}'.format(dirs), f_new))

但这不起作用,因为当我运行我的代码时,由于某些原因,代码会从 subduers 中删除日期

谁能帮我理解如何解决这个问题?

【问题讨论】:

  • dirs.strip(root) 正在丢弃定位文件所需的完整路径名的一部分。写r'{}'.format(dirs) 而不仅仅是dirs 有什么意义?

标签: python python-os


【解决方案1】:

以下是遍历文件夹并仅选择您要查找的文件的更有效方法:

source_folder = '<path-to-dir>/942ba956-8967-4bec-9540-fbd97441d17f/'
files = [os.path.normpath(os.path.join(root,f)) for root,dirs,files in os.walk(source_folder) for f in files if '000000' in f and not f.endswith('.gz')]
for file in files:
    os.rename(f, f"{f}.csv")

列表推导式存储您要查找的文件的完整路径。您可以将理解中的条件更改为您需要的任何内容。我经常使用这个代码 sn-p 来查找特定类型的图像,或者从选定的文件中删除不需要的文件。 在 for 循环中,文件被重命名,添加 .csv 扩展名。

【讨论】:

    【解决方案2】:

    我会使用 glob 来查找文件。

    import os, glob
    zdir = '942ba956-8967-4bec-9540-fbd97441d17f'
    files = glob.glob('*{}/000000'.format(zdir))
    for fly in files:
        os.rename(fly, '{}.csv'.format(fly))
    

    【讨论】: