代码之家  ›  专栏  ›  技术社区  ›  Chan

如何在google bucket中读取、写入和列出文件夹和文件?

  •  1
  • Chan  · 技术社区  · 6 年前

    我想用Python在Google云存储桶中读/写文件。

    假设我有一个文件夹 gs://my_project/data .

    • 如何列出上述文件夹中的文件夹和文件?

    • 如何读写文件?

    1 回复  |  直到 6 年前
        1
  •  5
  •   syltruong    6 年前

    有几种方法可以执行这些操作。最常见的是使用本地Google云存储API Python .

    特别地, 步骤0 json 凭据并设置指向它的环境变量:

    export GOOGLE_APPLICATION_CREDENTIALS="[PATH-TO-JSON-CREDS]"


    一。列出文件和文件夹

    there is no notion of a "directory"/"folder" . 只有bucket和blob/对象。尽管如此 / 在blob中,名称可用于模拟类似文件夹的层次结构。

    从中列出blob gs://my_project/data :

    from google.cloud import storage
    
    client = storage.Client()
    bucket = client.bucket('my_project')
    
    blobs = list(bucket.list_blobs(prefix='data/'))
    

    读取中列出的第一个blob gs:/我的项目/数据 .

    target_blob = blobs[0]
    
    # read as string
    read_output = target_blob.download_as_string()
    

    要写入新blob,除了写入本地文件并从文件上载之外,我没有找到其他方法。

    target_blob = bucket.blob('new_blob.txt')
    
    local_tmp_path = 'tmp.txt'
    
    # write string
    with open(local_tmp_path, 'w') as f:
       f.write('Hello World')
    
    with open(local_tmp_path, 'r') as f:
       blob.upload_from_file(f)
    
        2
  •  0
  •   Duccio Piovani    5 年前

    为了列出/读取文件,@syltruong建议的代码不适用于某些权限错误。我不得不把密码改成

    storage_client = storage.Client.from_service_account_json('./path_to_json')
    bucket = storage_client.bucket(bucketname)
    blobs = list(bucket.list_blobs(prefix='data/'))
    

    效果很好。