循环浏览不同文件夹中的文件

2024-04-25 08:57:38 发布

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

如何循环2个文件夹?在Apple及其所有子文件夹中,我想查找包含“绿色”的Excel文件。在香蕉中,我想查找包含“黄色”的文件。我需要明确地指定文件夹路径,不能只在整个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


Tags: and文件in文件夹appledffordate
2条回答

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

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开头的文件,可以删除第一个星号,如so 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)

相关问题 更多 >