2017-03-07 17 views
6

Tôi có một biến trong đó có các AWS s3 urls3 url - lấy tên xô và đường dẫn

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

Tôi muốn nhận được bucket_name trong một biến và nghỉ ngơi tức là /folder1/folder2/file1.json trong một biến. Tôi đã thử các biểu thức thông thường và có thể nhận được bucket_name như dưới đây, không chắc chắn nếu có một cách tốt hơn.

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

Làm cách nào để nhận phần còn lại tức là - folder1/folder2/file1.json?

Tôi đã kiểm tra xem có một tính năng boto3 để trích xuất bucket_name và khóa khỏi url nhưng không thể tìm thấy nó.

Trả lời

10

Vì đó chỉ là một URL bình thường, bạn có thể sử dụng urlparse để nhận tất cả các phần của URL.

>>> 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' 

Với Python 3 urlparse chuyển đến urllib.parse nên sử dụng:

from urllib.parse import urlparse 
+0

Cảm ơn bạn. Tuyệt vời!! –

1

Nếu bạn muốn làm điều đó với biểu thức thông thường, bạn có thể làm như sau:

>>> 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' 

này có lợi thế là bạn có thể kiểm tra sơ đồ s3 thay vì cho phép bất kỳ thứ gì ở đó.

1

Đối với những người như tôi đang cố gắng sử dụng urlparse để trích xuất khóa và nhóm để tạo đối tượng bằng boto3. Có một chi tiết quan trọng: loại bỏ dấu gạch chéo từ đầu của khóa

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('/')) 

Phải mất một thời gian để nhận ra rằng vì boto3 không ném bất kỳ ngoại lệ.

Các vấn đề liên quan