使用pandas从命令行打开GCS中存储的Excel文件

问题描述 投票:0回答:2

以下代码片段来自 Google 教程,它只是打印给定存储桶中 GCP 上的文件名称:

from google.cloud import storage


def list_blobs(bucket_name):
    """Lists all the blobs in the bucket."""
    # bucket_name = "your-bucket-name"

    storage_client = storage.Client()

    # Note: Client.list_blobs requires at least package version 1.17.0.
    blobs = storage_client.list_blobs(bucket_name)

    for blob in blobs:
        print(blob.name)

list_blobs('sn_project_data')

我不能从命令行运行:

$ python path/file.py

在我的终端中,该存储桶中的文件被打印出来。太棒了,它有效! 然而,这并不是我的目标。我正在寻找打开一个文件并对其进行操作。例如:

df = pd.read_excel(filename)
print(df.iloc[0])

但是,当我将路径传递给上面时,返回的错误为“无效的文件路径”。所以我确信存在某种 GCP 特定函数调用来实际访问这些文件...

我应该运行什么命令?

编辑:此视频https://www.youtube.com/watch?v=ED5vHa3fE1Q展示了打开文件的技巧,在此过程中需要使用StringIO。但它不支持 Excel 文件,所以这不是一个有效的解决方案。

pandas google-cloud-storage
2个回答
8
投票

read_excel() 目前不支持谷歌云存储文件路径,但可以读取字节数据。

pandas.read_excel(io,sheet_name = 0,标题= 0,名称=无, index_col=无、usecols=无、squeeze=False、dtype=无、engine=无、 转换器=无,true_values=无,false_values=无,skiprows=无, nrows=无,na_values=无,keep_default_na=True,na_filter=True, verbose=False,parse_dates=False,date_parser=无,数千=无, 评论=无,skipfooter=0,convert_float=True,mangle_dupe_cols=True, 存储选项=无)

参数:io:str、bytes、ExcelFile、xlrd.Book、路径对象或 类似文件的对象

您可以使用 blob 对象并使用 download_as_bytes() 将对象转换为字节。

将此 blob 的内容下载为字节对象。

对于这个例子,我只是使用了一个随机样本xlsx文件并阅读了第一张表:

from google.cloud import storage
import pandas as pd

bucket_name = "your-bucket-name"
blob_name = "SampleData.xlsx"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

data_bytes = blob.download_as_bytes()

df = pd.read_excel(data_bytes)
print(df)

测试完成: enter image description here


0
投票

现在更容易了: 首先,您可能需要安装 openpyxl

pip install openpyxl

然后在Python中 将 pandas 导入为 pd

   df = pd.read_excel("gs://bucket/filename.xlsx")
   df.describe()
   df.head()
© www.soinside.com 2019 - 2024. All rights reserved.