循环遍历不同文件夹中的文件

Loop over files in different folders

如何遍历 2 个文件夹?在 Apple 及其所有子文件夹中,我想查找 Excel 个包含“green”的文件。在 Banana 中,我想查找包含“黄色”的文件。我明确需要指定文件夹路径,不能只遍历整个 C 盘。

import os
folders = ['C:/Desktop/apple', 'C:/Downloads/banana']
for x in in range(len(folders)):
    for root, dirs, files in os.walk(folders[i]):
        for file in files:
            if file.endswith(".xlsx") and "banana" in folders[i] and "yellow" in file:
                df = pd.read_excel(os.path.join(root, file))
                df['date'] = pd.to_datetime(df.date)
                ...

            if file.endswith(".xlsx") and "apple" in folders[i] and "green" in file:
                df = pd.read_excel(os.path.join(root, file))
                df['date'] = pd.to_datetime(df.date)
                ...

由于所有 excel 文件看起来都一样,我上面的代码很麻烦,因为我正在复制代码来读取数据帧并清理 df。

您可以创建一个字典,其中键是文件夹,值是要搜索的内容。伪代码:

import os

to_search = {                             # <--- the dictionary
    "C:/Desktop/apple": "green",
    "C:/Desktop/banana": "yellow",
}

for folder, item in to_search.items():    # <--- use dict.items()
    for root, dirs, files in os.walk(folder):  # <--- here you use "folder"
        for file in files:
            if file.endswith(".xlsx") and item in file:   # <--- here you use "item"
                df = pd.read_excel(os.path.join(root, file))
                df["date"] = pd.to_datetime(df.date)

                # ...

获取符合您条件的所有文件路径的最简单方法是使用 glob 包:

import glob
for file in glob.glob('C:/Desktop/apple/*green*.xlsx') + glob.glob('C:/Desktop/banana/*yellow*.xlsx'):
    print(file)
    df = pd.read_excel(os.path.join(root, file))
    df['date'] = pd.to_datetime(df.date)

Glob 使用正则表达式模式匹配。如果你想选择只以 green 开头的文件,你可以像这样删除第一个星号 green*.

对此使用 pathlib:

from pathlib import Path
for file in [f"C:/Desktop/{f}" for f in list(Path('apple').glob('*green*.csv')) + list(Path('banana').glob('*yellow*.csv'))]:
    df = pd.read_excel(os.path.join(root, file))
    df['date'] = pd.to_datetime(df.date)