首页 > 解决方案 > 使用字典和循环操作文件夹中每个文件的值

问题描述

如何根据从字典中提取的值来操作文件夹的每个文件?基本上,假设我在一个文件夹中有 x 个文件。我使用 pandas 重新格式化数据框,添加包含报告日期的列,并以相同的名称和日期保存新文件。

import pandas as pd
import pathlib2 as Path
import os

source = Path("Users/Yay/AlotofFiles/April")

items = os.listdir(source)

d_dates = {'0401' : '04/1/2019', '0402 : 4/2/2019', '0403 : 04/03/2019'}

for item in items:
   for key, value in d_dates.items():

        df = pd.read_excel(item, header=None)
        df.set_columns = ['A', 'B','C']
        df[df['A'].str.contains("Awesome")]
        df['Date'] = value
        file_basic = "retrofile"
        short_date = key 
        xlsx = ".xlsx"
        file_name = file_basic + short_date + xlsx
        df.to_excel(file_name)

我希望每个文件都是唯一的并按日期分类。在这种情况下,我想要三个文件,例如“retrofile0401.xlsx”,其中有一列包含“04/01/2019”并且只有与原始文件相关的数据。实际结果几乎是循环每个单独的项目,使用这些值创建三个不同的文件,移动到下一个文件,重复并替换第一次迭代,直到我只剩下三个文件,它们是最后一个文件的副本。唯一不同的是每个文件都有不同的日期并且命名不同。这就是我想要的,但它正在复制最后一个文件中的数据。如果我删除第二个循环,它会按照我想要的方式工作,但是无法根据我在字典中创建的值对其进行分类。

标签: pythonpandasloops

解决方案


试试下面的。我只是明确输入文件名以明确发生了什么。您可以继续从源头使用您的。

input_filenames = [
    'retrofile0401_raw.xlsx', 
    'retrofile0402_raw.xlsx', 
    'retrofile0403_raw.xlsx',]

date_dict = {
    '0401': '04/1/2019', 
    '0402': '4/2/2019', 
    '0403': '04/03/2019'}

for filename in input_filenames:
    date_key = filename[9:13]
    df = pd.read_excel(filename, header=None)
    df[df['A'].str.contains("Awesome")]
    df['Date'] = date_dict[date_key]
    df.to_excel('retrofile{date_key}.xlsx'.format(date_key=date_key))

filename[9:13]从文件名中获取字符#9-12。这些是与您的日期代码相对应的那些。


推荐阅读