Nat*_*eed 24 python cloud amazon-s3
我想写一个Python脚本,它将使用他们的url从s3读取和写入文件,例如:'s3:/ mybucket/file'.它需要在本地和云中运行而不需要任何代码更改.有没有办法做到这一点?
编辑:这里有一些很好的建议,但我真正想要的是允许我这样做的东西:
myfile = open("s3://mybucket/file", "r")
Run Code Online (Sandbox Code Playgroud)
然后像任何其他文件对象一样使用该文件对象.那真的很酷.如果它不存在,我可能会为自己写这样的东西.我可以在simples3或boto上构建那个抽象层.
Sky*_*and 12
对于开放,它应该是这样简单:
import urllib
opener = urllib.URLopener()
myurl = "https://s3.amazonaws.com/skyl/fake.xyz"
myfile = opener.open(myurl)
Run Code Online (Sandbox Code Playgroud)
如果文件是公共的,这将适用于s3.
要使用boto编写文件,它有点像这样:
from boto.s3.connection import S3Connection
conn = S3Connection(AWS_KEY, AWS_SECRET)
bucket = conn.get_bucket(BUCKET)
destination = bucket.new_key()
destination.name = filename
destination.set_contents_from_file(myfile)
destination.make_public()
Run Code Online (Sandbox Code Playgroud)
lemme知道这是否适合你:)
def find_bucket_key(s3_path):
"""
This is a helper function that given an s3 path such that the path is of
the form: bucket/key
It will return the bucket and the key represented by the s3 path
"""
s3_components = s3_path.split('/')
bucket = s3_components[0]
s3_key = ""
if len(s3_components) > 1:
s3_key = '/'.join(s3_components[1:])
return bucket, s3_key
def split_s3_bucket_key(s3_path):
"""Split s3 path into bucket and key prefix.
This will also handle the s3:// prefix.
:return: Tuple of ('bucketname', 'keyname')
"""
if s3_path.startswith('s3://'):
s3_path = s3_path[5:]
return find_bucket_key(s3_path)
Run Code Online (Sandbox Code Playgroud)
您可以将其与这样的代码一起使用
from awscli.customizations.s3.utils import split_s3_bucket_key
import boto3
client = boto3.client('s3')
bucket_name, key_name = split_s3_bucket_key(
's3://example-bucket-name/path/to/example.txt')
response = client.get_object(Bucket=bucket_name, Key=key_name)
Run Code Online (Sandbox Code Playgroud)
这没有解决与s3键作为文件之类的对象进行交互的目标,但这是朝着这个方向迈出的一步。
我还没有看到可以直接使用 S3 url 的东西,但你可以使用S3 访问库(simples3看起来不错)和一些简单的字符串操作:
>>> url = "s3:/bucket/path/"
>>> _, path = url.split(":", 1)
>>> path = path.lstrip("/")
>>> bucket, path = path.split("/", 1)
>>> print bucket
'bucket'
>>> print path
'path/'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47508 次 |
| 最近记录: |