如何在执行时传递多个参数/参数

2024-05-21 03:09:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须在作为条件执行python脚本时传递多个参数。 下面是我的代码,但我必须在多个条件下执行相同的步骤。 客户端1和2有4个不同的文件存在数据和元数据错误。 所以,如果我通过python.py client1,data,date 然后,我的函数应该选择第一个文件名client1\u data\u error\u file\u 1并创建一个数据帧并插入数据库

    import pandas as pd
    from operator import itemgetter
    import glob
    import bz2
    import csv
    import import argparse
    
    
    client1_data_error_file_1=10_client1_AAAAAA_data_error_date.bz2
    client1_metadata_error_file_1=10_client1_AAAAAA_metadata_error_date.bz2
    client2_data_error_file_1=20_client2_AAAAAA_data_error_date.bz2
    client2_metadata_error_file_1=10_client1_AAAAAA_metadata_error_date.bz2
    
    def load_errors_database(argument,client,error):
    header = ["filedate", "errorcode", "errorROEID", "ROEID", "type", "rawrecord", "filename"]
    data = []
    req_cols = itemgetter(0, 1, 2, 3, 4, 9, 10)
    
    for error_filename in glob.glob("*.bz2"):
        with bz2.open(error_filename, "rt", encoding="utf-8") as f_error_file:
            csv_input = csv.reader(f_error_file, skipinitialspace=True)
            
            for orig_row in csv_input:
                row = req_cols(orig_row)
                data.append([row[0], row[1], row[2], row[3], row[4], ",".join(orig_row), error_filename])
    
    df = pd.DataFrame(data, columns=header)
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database)
cursor = cnxn.cursor()

# Insert Dataframe into SQL Server:
for index, row in df.iterrows():
    cursor.execute("INSERT INTO dbo.error_table (filedate, errorcode, errorROEID, ROEID, type, rawrecord, filename) values(?,?,?,?,?,?,?)", row.filedate, row.errorcode, row.errorROEID, row.ROEID, row.type, row.rawrecord, row.filename)
cnxn.commit()
cursor.close()

我如何通过这些条件?不一定是功能。 当我从终端执行python代码时,我希望

python_error_file.py client1, data,date

现在,它应该选择第一个文件并执行必要的步骤。如果我通过

python_error_file.py client2, metadata,date

它应该选择第四个文件并执行所需的步骤。 所有四个文件的步骤都相同。我只需要在执行代码时将它们作为参数传递

有人能帮我吗


Tags: 文件csvimportdatadate步骤errorfilename
1条回答
网友
1楼 · 发布于 2024-05-21 03:09:01

argparse是您使用简单语法创建手动命令行工具的朋友。以下是一个帮助您的代码片段:

import argparse

parser = argparse.ArgumentParser(description='client file parser')
parser.add_argument(
    '-c', ' client',
    help='client name',
    type=str
)
parser.add_argument(
    '-m', ' metadata',
    help='meta data',
    type=str,
    default=''
)
parser.add_argument(
    '-d', ' data',
    help='data',
    type=str,
    default=''
)

args = parser.parse_args()

load_errors_database(args.client, args.metadata, args.data)

用法:

python file.py -c client1 -m metadata -d data

相关问题 更多 >