О Python Argparse - PullRequest
       24

О Python Argparse

0 голосов
/ 01 октября 2019

Я пытаюсь прочитать файлы Excel и вывести их как json с pandas.DataFrame.

В этих ситуациях я запускаю программу:

[y.pan@working excel_check]$ python3.6 check.py -j -o result.txt ./workingfile/testfile01.xlsx
[y.pan@working excel_check]$ python3.6 check.py -j -o result.json ./workingfile/

с путем к одному файлу или каталогуработает без проблем. Но когда я пытаюсь ввести данные, как это:

[y.pan@working excel_check]$ python3.6 check.py -j -o result.json ./workingfile/testfile*.xlsx

всегда будет выдавать ошибку:

unrecognized arguments:  ./workingfile/testfile_01_fin.xlsx ./workingfile/testfile_02_fin.xlsx ./workingfile/testfile_03_fin.xlsx ... ./workingfile/testfile_99_fin.xlsx

Вот мой код, пытающийся это выяснить:

def make_df(input_path):

        # path = os.getcwd()
        df = pd.DataFrame()
        if os.path.isdir(input_path):
            files = os.listdir(input_path)
            files_xlsx = [f for f in files if f[-4:] == "xlsx"]

        for f in files_xlsx:
            data = pd.read_excel(f)
            df = df.append(data)
    elif os.path.isfile(input_path):
        data = pd.read_excel(input_path)
        df = df.append(data)
    else:
        print("Not a file or directory.")

def create_argparser():

    ap = argparse.ArgumentParser()

    ap.add_argument(
        "-o", "--output",
        action = "store"
    )
    ap.add_argument(
        "-j","--json",
        action = "store_true"
    )
    ap.add_argument("input_path", action = "store")

    return ap.parse_args()

def main():

    args = create_argparser()
    if args.json:
        if args.output:
            write_json(args.input_path, args.output)
        else:
            #write_json(df, stdout)
            pass
    else:
        print_df(args.input_path)
        # pass

    exit()

Где мне нужно изменить, чтобы запустить третий случай?

...