Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问文件夹"/&引用;在Google bucket中使用Python libcloud?_Python_Google Cloud Platform_Google Cloud Storage_Libcloud - Fatal编程技术网

如何访问文件夹"/&引用;在Google bucket中使用Python libcloud?

如何访问文件夹"/&引用;在Google bucket中使用Python libcloud?,python,google-cloud-platform,google-cloud-storage,libcloud,Python,Google Cloud Platform,Google Cloud Storage,Libcloud,我有一个带有以下树的Google bucket(注意名为“/”!)的文件夹): 我想使用子文件夹“/”中的Python库libcloud访问对象(.csv文件) 我可以访问“/”文件夹之外的data.csv: 但是,如果使用libcloud,则使用client.get_object(container_name='bucket-1',object_name='//runs/run-1/data.csv')或client.get_object(container_name='bucket-1',o

我有一个带有以下树的Google bucket(注意名为“/”!)的文件夹):

我想使用子文件夹“/”中的Python库libcloud访问对象(.csv文件)

我可以访问“/”文件夹之外的
data.csv

但是,如果使用libcloud,则使用
client.get_object(container_name='bucket-1',object_name='//runs/run-1/data.csv')
client.get_object(container_name='bucket-1',object_name=''/runs/run-1/data.csv')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/andrey/miniconda3/envs/mostly-cloud/lib/python3.6/site-packages/libcloud/storage/drivers/s3.py", line 342, in get_object
    object_name=object_name)
libcloud.storage.types.ObjectDoesNotExistError: <ObjectDoesNotExistError in <libcloud.storage.drivers.google_storage.GoogleStorageDriver object at 0x7f40560cd4e0>, value=None, object = //runs/run-1/data.csv>
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/andrey/miniconda3/envs/mostary cloud/lib/python3.6/site packages/libcloud/storage/drivers/s3.py”,第342行,在get_对象中
对象名称=对象名称)
libcloud.storage.types.objectdoesnotextister错误:
另一方面,

client.list_container_objects(client.get_container("bucket-1"))
[<Object: name=/runs/run-1/data.csv, size=357683, hash=..., provider=Google Cloud Storage ...>, <Object: name=/runs/run-2/data.csv, size=357683, hash=..., provider=Google Cloud Storage ...>] 
client.list\u container\u对象(client.get\u container(“bucket-1”))
[, ] 

那么,如何获取位于“/”目录中的对象呢?

为了测试这种行为,我复制了您的场景。我能够通过以下方式创建此层次结构:

gsutil cp your-file gs://your-bucket//abc
这是一种奇怪的行为,不应该被允许

如果尝试从GCP控制台创建具有此名称的文件夹,您将看到以下消息:

文件夹名称中不允许使用正斜杠(/)。

出于这个原因,我创建了一个网站,你可以从中获得关于这个问题的反馈

关于文件夹的命名,你可以看看谷歌的文档,看看它们是如何工作的


总之,不应允许您创建具有此名称的文件夹。现在最好的做法是避免使用这样的名称,而选择可以处理的字符串名称。

您创建了非法/不正确的文件结构。您需要删除文件并正确地重新创建对象名称。请记住,没有目录,它们只是在对象名称中用分隔符字符模拟的。@JohnHanley这是否意味着不能使用单分隔符“/?为什么我可以使用gsutils访问?什么是正确的对象名称?在云存储中,对象名称不能以
/
开头。一个工具允许这一点并不重要。大多数工具和库都会损坏,因此解决方案是修复它,而不是试图找到绷带。大多数库会将多个
/
字符组合成一个。@JohnHanley好的,我明白了,谢谢!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/andrey/miniconda3/envs/mostly-cloud/lib/python3.6/site-packages/libcloud/storage/drivers/s3.py", line 342, in get_object
    object_name=object_name)
libcloud.storage.types.ObjectDoesNotExistError: <ObjectDoesNotExistError in <libcloud.storage.drivers.google_storage.GoogleStorageDriver object at 0x7f40560cd4e0>, value=None, object = //runs/run-1/data.csv>
client.list_container_objects(client.get_container("bucket-1"))
[<Object: name=/runs/run-1/data.csv, size=357683, hash=..., provider=Google Cloud Storage ...>, <Object: name=/runs/run-2/data.csv, size=357683, hash=..., provider=Google Cloud Storage ...>] 
gsutil cp your-file gs://your-bucket//abc