मैं पायथन के लिए नया हूं, मुझे एस 3 में फाइल अपलोड करने के लिए एक छोटी सी स्क्रिप्ट मिली है, फिलहाल मैं स्क्रिप्ट में केवल एक ही फाइल को हार्ड-कोड करता हूं, बाल्टी का नाम भी हार्ड-कोडेड है।

मैं इस स्क्रिप्ट में argparse को मर्ज करना चाहता था ताकि मैं अपने आप से कुछ तर्क जोड़ सकूं और विभिन्न फाइलें अपलोड कर सकूं। उदाहरण के लिए, कमांड लाइन में मैं file_name x को bucket_name xxx पर अपलोड करने का निर्णय लेने के लिए तर्क निर्दिष्ट कर सकता हूं।

मैं argparse सेट करने के तरीके के बारे में दस्तावेज़ पढ़ रहा हूं लेकिन मैं केवल छोटे बदलाव कर सकता हूं और यह नहीं जानता कि इसे मेरी स्क्रिप्ट में फ़ंक्शन के साथ कैसे कार्यान्वित किया जाए (मुझे लगता है कि os.rename अनावश्यक होगा क्योंकि हम पार्स करेंगे अपने आप से बहस)। मैं तर्क जानता हूं, उन्हें वास्तविक कोड में लागू करने में कठिनाई हो रही है ... क्या कोई मुझे एक उदाहरण दे सकता है या मुझे कुछ संकेत दे सकता है, बहुत धन्यवाद।

0
Cecilia 18 अप्रैल 2020, 18:40

1 उत्तर

सबसे बढ़िया उत्तर

यहां बताया गया है कि स्क्रिप्ट कमांड लाइन तर्कों को लेकर कैसी दिखेगी।

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
3
gold_cy 18 अप्रैल 2020, 16:06