Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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 cloud storage 如何在tensorflow模型中使用python访问google云存储桶中最新上传的对象_Google Cloud Storage_Python 3.5 - Fatal编程技术网

Google cloud storage 如何在tensorflow模型中使用python访问google云存储桶中最新上传的对象

Google cloud storage 如何在tensorflow模型中使用python访问google云存储桶中最新上传的对象,google-cloud-storage,python-3.5,Google Cloud Storage,Python 3.5,我正在研究tensorflow模型,我想利用最新的ulpoad对象,以便从上传的对象获得输出。是否有方法使用python访问上传到Google云存储桶的最新对象。没有直接方法从Google云存储获取最新上传的对象。但是,使用对象的元数据有一个变通方法 上传到谷歌云存储的每个对象都有不同的元数据。有关更多信息,请访问文档。其中一个元数据是“上次更新的”。此值是上次更新对象的时间戳。这只能在3种情况下发生: A) 该对象是第一次上载的 B) 该对象已上载并被替换,因为它已存在 C) 对象的元数据已更

我正在研究tensorflow模型,我想利用最新的ulpoad对象,以便从上传的对象获得输出。是否有方法使用python访问上传到Google云存储桶的最新对象。

没有直接方法从Google云存储获取最新上传的对象。但是,使用对象的元数据有一个变通方法

上传到谷歌云存储的每个对象都有不同的元数据。有关更多信息,请访问文档。其中一个元数据是“上次更新的”。此值是上次更新对象的时间戳。这只能在3种情况下发生:

A) 该对象是第一次上载的

B) 该对象已上载并被替换,因为它已存在

C) 对象的元数据已更改

如果不更新对象的元数据,则可以使用以下解决方法:

  • 使用非常旧的日期时间对象(1900-01-01 00:00:00.000000)设置变量。对象不可能具有此更新元数据
  • 设置一个变量以存储最新blob的名称,并将其设置为“无”
  • 列出bucket中的所有blob
  • 用于每个blob名称,并将其转换为日期\时间对象
  • 如果blob的更新元数据大于您已有的元数据,则更新它并保存当前名称
  • 此过程将继续,直到您搜索所有BLOB,并且只有最新的BLOB将保存在变量中
  • 我做了一点自我编码,这对我来说很有用。接受逻辑并根据您的需要进行修改。我还建议在本地测试它,然后在代码中使用它

    但是,如果您手动更新blob的元数据,那么这是另一种解决方法:

    如果您更新blob的任何元数据,请参阅本文档,则该blob的“上次更新”时间戳也将得到更新,因此运行上述方法将不会为您提供上次上载的对象,而是提供上次修改的不同对象。因此,您可以在每次上载对象时向对象添加自定义元数据,并且该自定义元数据将是上载对象时的时间戳。因此,无论以后元数据发生什么情况,自定义元数据都将始终保留上载对象的时间。然后使用与上面相同的方法,但不要获取
    blob.update
    获取
    blob.metadata
    ,然后使用与上面相同的逻辑使用该日期

    附加说明:

    要使用自定义元数据,您需要使用前缀
    x-goog-meta-
    ,如查看和编辑对象元数据文档中的部分所述


    因此,[CUSTOM\u METADATA\u KEY]应该类似于
    x-goog-meta-UPLOAD
    [CUSTOM\u METADATA\u VALUE]应该是
    [CURRENT\u TIMESTAMP\u DURING\u UPLOAD]
    下面是我用来抓取最新更新对象的

    实例化您的客户机
    从google.cloud导入存储
    #首先建立你的客户
    storage\u client=storage.client()
    
    通过
    前缀定义
    bucket\u name
    和任何其他路径
    #拿上你的衣服
    bucket_name='你光荣的bucket name'
    前缀='special directory/in/your/bucket'#可选
    
    迭代客户端返回的
    blob
    将这些存储为元组记录既快捷又高效

    blob=[(blob,blob.updated)用于存储中的blob\u client.list\u blob(
    你的名字,
    前缀=前缀,
    )]
    
    根据第二个元组值对列表进行排序
    #根据更新的键排序并获取最新值
    latest=sorted(blob,key=lambda tup:tup[1])[-1][0]
    string\u data=最新。下载\u作为\u string()
    
    元数据密钥和谷歌云存储

    一行

    #假设存储_客户端如上所述
    #latest是blob数据的字符串格式响应
    latest=storage\u client.list\u blob(bucket\u name,prefix=prefix)]中blob的排序([(blob,blob.updated)],key=lambda tup:tup[1])[-1][0]。下载为字符串()