1

我必须阅读 xlsx 格式的谷歌存储桶文件。桶中的文件结构看起来像

bucket_name
       folder_name_1
               file_name_1
       folder_name_2
       folder_name_3
                file_name_3

python片段看起来像

def main():
    storage_client = storage.Client.from_service_account_json(
        Constants.GCP_CRENDENTIALS)
    bucket = storage_client.bucket(Constants.GCP_BUCKET_NAME)

    blob = bucket.blob(folder_name_2 + '/' + Constants.GCP_FILE_NAME)

    data_bytes = blob.download_as_bytes()

    df = pd.read_excel(data_bytes, engine='openpyxl')
    print(df)

def function1():
     print("no file in the folder") # sample error

在上面的代码片段中,我试图打开folder_name_2,它返回一个错误,因为没有要读取的文件。

function1当任何文件夹中没有文件时,我需要使用打印错误,而不是抛出错误。

有什么想法吗?

4

2 回答 2

0

我对 GCP API 不熟悉,但你会想要按照以下方式做一些事情:

try:
    blob = bucket.blob(folder_name_2 + '/' + Constants.GCP_FILE_NAME)
    data_bytes = blob.download_as_bytes()
except Exception as e:
    print(e)

https://docs.python.org/3/tutorial/errors.html#handling-exceptions

于 2021-11-11T09:48:13.463 回答
0

我不确定您的最终目标是什么,但另一个逻辑是列出存储桶中的可用资源并进行处理。

首先,让我们定义一个函数来列出 Bucket 中的可用资源。如果要将研究限制在 Bucket 内的子文件夹中,可以添加前缀。

def list_resource(client, bucket_name, prefix=''):
    path_files = []
    for blob in client.list_blobs(bucket_name, prefix=prefix):
        path_files.append(blob.name)
    return path_files

现在您可以处理您的 xlsx 文件:

for resource in list_resource(storage_client, Constants.GCP_BUCKET_NAME):
    if '.xlsx' in resource:
        print(resource)
        # Load blob and process your xlsx file
于 2021-11-11T10:32:47.783 回答