繁体   English   中英

如何在 Python 中实现 argparse

[英]How to implement argparse in Python

我是 Python 的新手,我有一个将文件上传到 S3 的小脚本,目前我只在脚本中硬编码一个文件,存储桶名称也是硬编码的。

我想在这个脚本中合并 argparse,这样我就可以自己添加一些论点并上传不同的文件。 例如,在命令行中我可以指定 arguments 来决定file_name x上传到bucket_name xxx

我一直在阅读有关如何设置 argparse 的文档,但我只能进行小的更改,并且不知道如何在我的脚本中使用 function 来实现它(我猜os.rename将是不必要的,因为我们将通过以下方式解析争论我们自己)。 我知道逻辑,只是很难在实际代码中实现它们......有人可以给我一个例子或给我一些提示,非常感谢。

这是使用命令行 arguments 的脚本的外观。

import argparse
import datetime
import logging
import os
import boto3


def make_new_key(filename: str):
    current_date = datetime.datetime.today().strftime('%Y-%m-%d_%H_%M_%S')
    # The next line handles the case where you are passing the
    # full path to the file as opposed to just the name
    name = os.path.basename(filename)

    parts = name.split('.')
    new_name = f"{parts[0]}{current_date}.csv"
    return new_name

def upload_to_s3(source_filename: str, new_name: str, bucket: str):
    logging.info(f"Uploading to S3 from {source_filename} to {bucket} {key}")
    s3_client = boto3.client("s3")
    with open(source_filename, 'rb') as file:
        response = s3_client.put_object(Body=file,
                                        Bucket=bucket,
                                        Key=new_name,
                                        ACL="bucket-owner-full-control")
        logging.info(response)


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--filename')
    parser.add_argument('--bucket')
    args = parser.parse_args()

    new_name = make_new_key(args.filename)
    upload_to_s3(args.filename, new_name, args.bucket)

然后你会这样调用脚本

python upload.py --filename path/to/file --bucket name_of_bucket

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM