代码适用于一个功能,但不适用于两个功能

Code works with one function, but not with two functions

我的问题是,如果我使用两个函数,则此代码不接受两个输入参数。

我也尝试在第二个函数中插入和删除点击命令和点击选项,但我总是发现主应用程序要求额外的参数(需要给出 2)或者代码是不执行第二个功能。 ( "add_new_column" )

我哪里做错了?

import pandas as pd

@click.command()
@click.option('--infile', prompt='Your input TSV filename', help='Write your tab separated value filename.')
@click.option('--out', prompt='Your output CSV filename', help='Write your new comma separated value filename.')
def convert_tsv_to_csv(infile, out):
    """Converting a Tab Separated Value into a Comma Separated Value for given files in cli arguments"""
    df = pd.read_csv(infile, delimiter='\t')
    df.to_csv(out, sep=',')

# @click.command()
# @click.option('--out', prompt='Your output CSV filename', help='Write your new comma separated value filename.')
# def add_new_column(out):
#     """Adding a new column named  "price_edited"   """
#     df = pd.read_csv(out, delimiter=',')
#     # this line creates a new cloned column from price column, which is a Pandas series.
#     # we then add the series to the dataframe, which holds our parsed CSV file
#     df['price_edited'] = df['price']
#     # save the dataframe to CSV
#     df.to_csv(out, sep=',')


if __name__ == '__main__':
    convert_tsv_to_csv()
    #add_new_column()```

第二次尝试:

import click
import pandas as pd


@click.command()
@click.option('--infile', prompt='Your input TSV filename', help='Write your tab separated value filename.')
@click.option('--out', prompt='Your output CSV filename', help='Write your new comma separated value filename.')
def convert_tsv_to_csv(infile, out):
    """Converting a Tab Separated Value into a Comma Separated Value for given files in cli arguments"""
    df = pd.read_csv(infile, delimiter='\t')
    df.to_csv(out, sep=',')


def add_new_column():
    """Adding a new column named  "price_edited"   """
    df = pd.read_csv(out, delimiter=',')
    # this line creates a new cloned column from price column, which is a Pandas series.
    # we then add the series to the dataframe, which holds our parsed CSV file
    df['price_edited'] = df['price']
    # save the dataframe to CSV
    df.to_csv(out, sep=',')


if __name__ == '__main__':
    convert_tsv_to_csv()
    add_new_column()

你的困惑在于对Click的作用有误解。单击用于解析命令行,然后 运行 按照命令行指定的方式运行。

在此处显示的示例中,从命令行的角度来看,您只需要一个函数。也就是说程序每次都会做同样的事情 运行。所以你只需要一键功能。

但是我有两件事要做!

将工作分成两个函数当然是有意义的,但是这两个函数需要从单击函数中调用,如下所示:

import pandas as pd
import click


@click.command()
@click.option('--infile', prompt='Your input TSV filename',
              help='Write your tab separated value filename.')
@click.option('--out', prompt='Your output CSV filename',
              help='Write your new comma separated value filename.')
def cli(infile, outfile):
    convert_tsv_to_csv(infile, outfile)
    add_new_column(outfile)


def convert_tsv_to_csv(infile, out):
    """Converting a Tab Separated Value into a Comma Separated Value
    for given files in cli arguments"""
    df = pd.read_csv(infile, delimiter='\t')
    df.to_csv(out, sep=',')


def add_new_column(out):
    """Adding a new column named  "price_edited"   """
    df = pd.read_csv(out, delimiter=',')
    # this line creates a new cloned column from price column, which
    # is a Pandas series.  We then add the series to the dataframe,
    # which holds our parsed CSV file
    df['price_edited'] = df['price']

    # save the dataframe to CSV
    df.to_csv(out, sep=',')

if __name__ == '__main__':
    cli()