微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环不同文件夹中的文件

如何解决循环不同文件夹中的文件

如何遍历 2 个文件夹?在 Apple 及其所有子文件夹中,我想查找包含“绿色”的 Excel 文件。在 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。

解决方法

获取符合条件的所有文件路径的最简单方法是使用 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)
,

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

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)

                # ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。