【发布时间】:2019-07-08 22:36:05
【问题描述】:
如何根据从字典中提取的值来操作文件夹的每个文件?基本上,假设我在一个文件夹中有 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”并且只有与原始文件相关的数据。 实际结果几乎是循环每个单独的项目,用这些值创建三个不同的文件,移动到下一个文件,重复并替换第一次迭代,直到我只剩下三个文件,它们是最后一个文件的副本。唯一不同的是每个文件都有不同的日期并且命名不同。这就是我想要的,但它正在复制最后一个文件中的数据。 如果我删除第二个循环,它会按照我想要的方式工作,但无法根据我在字典中创建的值对其进行分类。
【问题讨论】:
-
有点难以理解您要做什么以及问题出在哪里(我认为这就是为什么还没有任何答案)。您能否提供与所需输出匹配的所需输入的示例?像输入文件名列表和与它们对应的输出文件名列表?
-
是的,当然。文件路径“Users/Yay/AlotofFiles/April”包含三个excel文件。我想继续重新格式化这些文件,因为数据的呈现方式很奇怪,而且我只对包含“真棒”的某些行感兴趣。基本上我正在过滤数据并在一个新的excel文件上创建它。每个文件对于包含“Awesome”的每一行都有唯一的值。我想为每个文件执行相同的重新格式化过程。我创建了一个循环,进入 Users/Yay/AlotofFiles/April 文件夹并执行我想做的事情。它会生成三个重新格式化的新文件...
-
...我想要的方式。现在每个文件都有给定日期的数据,我希望能够对它们进行分类。如果我有三个文件,“retrofile0401_raw.xlsx、retrofile0402_raw.xlsx、retrofile0403_raw.xlsx,我希望这些文件重新格式化,然后标记为“retrofile0401.xlsx、retrofile0402xlsx、retrofile0403.xlsx。如果我要打开retrofile0401.xlsx,我应该会看到“A”、“B”、“C”列的值和“日期”的新列,在这种情况下是 04/01/2019,但不存在之前在“retrofile0401_raw.xlsx.
-
通过实现第二个循环,它执行这部分,但代价是简单地制作最后一个文件retrofile0403_raw.xlsx的三个副本。因为我在逻辑上假设,循环遍历第一个文件,制作第一个文件的三个副本,每个文件从循环中的三个提取值中取出,然后继续到第二个文件,执行相同的操作并覆盖第一次迭代,然后重复,直到最后一个文件只有三个副本。
-
还是一头雾水,抱歉。你有三个文件进来。你想写三个新文件还是九个新文件或其他数字?