Управление значениями каждого файла в папке с использованием словаря и цикла - PullRequest
1 голос
/ 09 июля 2019

Как мне манипулировать каждым файлом в папке на основе значений, извлеченных из словаря? По сути, скажем, у меня есть 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», в котором есть столбец, содержащий «01.04.2009» и содержащий только данные, относящиеся к исходному файлу. Фактический результат - в значительной степени зацикливание каждого отдельного элемента, создание трех разных файлов с этими значениями, переход к следующему файлу, повторение и замена первой итерации, и до тех пор, пока у меня останутся только три файла, которые являются копиями последнего файла. Единственное, что отличается, это то, что каждый файл имеет свою дату и называются по-разному. Это то, что я хочу, но это дублирует данные из последнего файла. Если я удаляю второй цикл, он работает так, как я хочу, но нет способа классифицировать его на основе значения, которое я сделал в словаре.

1 Ответ

0 голосов
/ 09 июля 2019

Попробуйте следующее. Я только делаю входные имена явными, чтобы прояснить, что происходит. Вы можете продолжать использовать свой из источника.

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 из имени файла. Это те, которые соответствуют вашим датам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...