Использование pandas pd.Excel файла с пользовательским вводом для пути к папке и имени файла - PullRequest
1 голос
/ 20 марта 2020

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

wb = pd.ExcelFile(folder_path+filename)

Я хочу поместить это в функцию, которая просит пользователя указать путь и имя файла и имеет дело с неверным вводом. Я запустил что-то подобное ниже, но не похоже, что ошибка генерируется внутри функции, так или иначе, и я не уверен, как сказать ', пока wb не является действительной вещью ' продолжать запрашивать путь к файлу, пока мы не получим действительный?

def Load_Parse():
    folder_path = input('\nEnter the path to the qry_T spreadsheet here (include slashes at the start and at the end): ')
    filename = input('\nEnter the name of the spreadsheet to be used here: ')
    sheetname = input('\nEnter the sheet containing the data here, including the extension (e.g. "qry_Trajectory 2019.xlsx": ')
    try:
        wb = pd.ExcelFile(folder_path+filename)
    except FileNotFoundError:

Есть идеи?

Затем я проанализирую файл, используя аналогичный метод, который я надеюсь:

df = wb.parse('filename')

1 Ответ

1 голос
/ 20 марта 2020

с использованием Pathlib, os и pandas и нескольких функций.

одной из ключевых функций, которые вам понадобятся, является while True, которая продолжает выполнять блок кода до тех пор, пока он не станет истинным и вы запускаете break

, не стесняйтесь редактировать свои собственные параметры c.

Модули

from pathlib import Path
import os
import pandas as pd
from xlrd import XLRDError

В действии

df = load_parser()

out:
#Hello Umar.Hussain please enter a valid target directory
#C:\Users\UmarH\Files
#1 excels_0
#2 excels_1
#Choose a number between 1 and 2
1
#Your Choice is excels_0.xlsx
#Choose a Sheet - Lists all sheets
'Sheet1'
# returns dataframe

Основная функция

def load_parser():

    user = os.getlogin()

    print(f"Hello {user} please enter a valid target directory") 
    cmd = input('')

    p = file_tester(cmd,file_type='path')
    print("Please select a number from the following file")
    target_file = create_excel_dict(p)
    target_df = enumerate_sheets(target_file)



    return target_df

Вспомогательные функции

def file_tester(string_path, file_type="path"):
    path = Path(string_path)

    while True:
        if path.is_dir():
            break
        else:
            cmd = input(f"Please Enter a Valid {file_type}")
            path = Path(cmd)

    return path


def create_excel_dict(target_path):
    xlsx_dict = {i: x for i, x in enumerate(target_path.glob('*.xlsx'), 1)}

    for k,v in xlsx_dict.items():
        print(k,v.stem)

    rng = [i for i in xlsx_dict.keys()]

    file_choice = input(f'Choose a number between {rng[0]} and {rng[-1]}')

    while True:
        try:
            file_choice = int(file_choice)
            print(f"Your Choice is {xlsx_dict[file_choice]}")
            break
        except KeyError:
            file_choice = input(f'Choose a number between {rng[0]} and {rng[-1]}')

    return xlsx_dict[file_choice]

def enumerate_sheets(target_file):

    xl = pd.ExcelFile(target_file)

    for sheet in xl.sheet_names:
        print(sheet)
    target_sheet = input("Please Type Your sheet name")

    while True:
        try:
            df = pd.read_excel(xl,sheet_name=target_sheet)
            break
        except XLRDError:
            target_sheet = input("Please enter a sheet from above.")

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