使用pandas pd.Excel文件,带有用户输入的文件夹路径和文件名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pandas pd.Excel文件,带有用户输入的文件夹路径和文件名相关的知识,希望对你有一定的参考价值。

我使用如下所示的pd.ExcelFile打开和解析文件,但目前仅将actual文件夹路径和文件名放在一个字符串中。

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')
答案

使用Pathlibospandas以及一些功能。

您需要的关键功能之一是while True,它将不断执行代码块,直到它变为真并启动break

随时根据您自己的规范进行编辑。

模块

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

以上是关于使用pandas pd.Excel文件,带有用户输入的文件夹路径和文件名的主要内容,如果未能解决你的问题,请参考以下文章

带有超链接的 Pandas read_excel

pandas中pd.read_excel()方法中的converters参数

Pandas常用方法手册

Pandas总结第二节 Pandas 的数据读取_pd.read_csv()的使用详解(非常全面,推荐收藏)

pandas操作速查表

pandas