2017-03-07 14 views
6

मिल मैं एक चर जो एडब्ल्यूएस S3 यूआरएलS3 यूआरएल - बाल्टी नाम और पथ

s3://bucket_name/folder1/folder2/file1.json 

है है मैं एक चर में bucket_name हो और आराम यानी /folder1/folder2/file1.json किसी अन्य रूप में करना चाहते हैं चर। मैंने नियमित अभिव्यक्तियों की कोशिश की और नीचे की तरह bucket_name प्राप्त कर सकता है, यह सुनिश्चित नहीं है कि कोई बेहतर तरीका है या नहीं।

m = re.search('(?<=s3:\/\/)[^\/]+', 's3://bucket_name/folder1/folder2/file1.json') 
print(m.group(0)) 

मैं बाकी i.e - फ़ोल्डर 1/फ़ोल्डर 2/file1.json कैसे प्राप्त करूं?

मैंने जांच की है कि bucket_name और url से कुंजी निकालने के लिए कोई boto3 सुविधा है, लेकिन उसे नहीं मिला।

उत्तर

10

चूंकि यह सिर्फ एक सामान्य यूआरएल है, इसलिए आप यूआरएल के सभी हिस्सों को प्राप्त करने के लिए urlparse का उपयोग कर सकते हैं।

>>> from urlparse import urlparse 
>>> o = urlparse('s3://bucket_name/folder1/folder2/file1.json') 
>>> o 
ParseResult(scheme='s3', netloc='bucket_name', path='/folder1/folder2/file1.json', params='', query='', fragment='') 
>>> o.netloc 
'bucket_name' 
>>> o.path 
'/folder1/folder2/file1.json' 

अजगर 3 urlparse साथ urllib.parse में ले जाया गया तो का उपयोग करें:

from urllib.parse import urlparse 
+0

धन्यवाद। बहुत बढ़िया!! –

1

आप नियमित अभिव्यक्ति के साथ क्या करना चाहते हैं, तो आप निम्न कर सकते हैं:

>>> import re 
>>> uri = 's3://my-bucket/my-folder/my-object.png' 
>>> match = re.match(r's3:\/\/(.+?)\/(.+)', uri) 
>>> match.group(1) 
'my-bucket' 
>>> match.group(2) 
'my-folder/my-object.png' 

यह है लाभ यह है कि आप वहां कुछ भी अनुमति देने की बजाय s3 योजना की जांच कर सकते हैं।

1

जो लोग मुझे पसंद करते हैं उनके लिए boto3 के साथ ऑब्जेक्ट बनाने के लिए कुंजी और बाल्टी निकालने के लिए urlparse का उपयोग करने का प्रयास कर रहा था। कुंजी

from urlparse import urlparse 
o = urlparse('s3://bucket_name/folder1/folder2/file1.json') 
bucket = o.netloc 
key = o.path.lstrip('/') 
boto3.client('s3') 
client.put_object(Body='test', Bucket=bucket, Key=key.lstrip('/')) 

की शुरुआत यह कुछ समय लिया एहसास है कि क्योंकि boto3 किसी भी अपवाद फेंक नहीं है से निकालें स्लेश: वहाँ एक महत्वपूर्ण विस्तार है।

संबंधित मुद्दे