Ree*_*Xia 9 python google-cloud-storage gcloud-python google-cloud-python
我打算编写一个Python程序来检查文件是否在我的Google云端存储的某个文件夹中,基本的想法是获取list
文件夹中的所有对象,文件名list
,然后检查文件abc.txt
是否在文件名list
.
现在的问题是,看起来Google只提供了一种获取方式obj
list
,即uri.get_bucket()
下面的代码来自https://developers.google.com/storage/docs/gspythonlibrary#listing-objects
uri = boto.storage_uri(DOGS_BUCKET, GOOGLE_STORAGE)
for obj in uri.get_bucket():
print '%s://%s/%s' % (uri.scheme, uri.bucket_name, obj.name)
print ' "%s"' % obj.get_contents_as_string()
Run Code Online (Sandbox Code Playgroud)
缺点uri.get_bucket()
是,看起来它首先得到所有的对象,这是我不想要的,我只需要得到特定文件夹的obj
名称list
(例如gs//mybucket/abc/myfolder
),这应该很快.
有人可以帮忙回答吗?感谢每一个答案!
您可能会发现,使用具有完整功能的Python客户端的JSON API更容易。它具有列出带有前缀参数的对象的功能,您可以通过以下方式使用该参数检查某个目录及其子目录:
from apiclient import discovery
# Auth goes here if necessary. Create authorized http object...
client = discovery.build('storage', 'v1beta2') # add http=whatever param if auth
request = client.objects().list(
bucket="mybucket",
prefix="abc/myfolder")
while request is not None:
response = request.execute()
print json.dumps(response, indent=2)
request = request.list_next(request, response)
Run Code Online (Sandbox Code Playgroud)
列表调用的完整文档在这里:https : //developers.google.com/storage/docs/json_api/v1/objects/list
此处记录了Google Python API客户端:https : //code.google.com/p/google-api-python-client/
您可能还想查看gcloud-python和文档.
from gcloud import storage
connection = storage.get_connection(project_name, email, private_key_path)
bucket = connection.get_bucket('my-bucket')
for key in bucket:
if key.name == 'abc.txt':
print 'Found it!'
break
Run Code Online (Sandbox Code Playgroud)
但是,您可能最好只检查文件是否存在:
if 'abc.txt' in bucket:
print 'Found it!'
Run Code Online (Sandbox Code Playgroud)
这为我工作:
client = storage.Client()
BUCKET_NAME = 'DEMO_BUCKET'
bucket = client.get_bucket(BUCKET_NAME)
blobs = bucket.list_blobs()
for blob in blobs:
print(blob.name)
Run Code Online (Sandbox Code Playgroud)
list_blobs()方法将返回用于查找存储桶中blob的迭代器。现在,您可以遍历Blob并访问存储桶中的每个对象。在此示例中,我仅打印出对象的名称。
该文档对我有很多帮助:
希望我能帮上忙!
归档时间: |
|
查看次数: |
9953 次 |
最近记录: |