无法读取上传到Google Cloud存储桶的CSV文件。

4

目标 - 读取上传到Google Cloud存储桶的csv文件。

环境 - 在主节点上运行SSH实例,使用Jupyter笔记本中的Python尝试访问上传到Google Cloud存储桶上的简单csv文件。

方法 -

第一种方法 - 编写一个简单的Python程序

编写了以下程序

import csv
f = open('gs://python_test_hm/train.csv' , 'rb' ) 
csv_f = csv.reader(f)
for row in csv_f
     print row

结果 - 错误信息 "没有这样的文件或目录"

第二种方法 - 使用gcloud包尝试访问train.csv文件。示例代码如下所示。下面的代码不是实际代码。在我的代码版本中,Google云存储上的文件被引用为"gs:///Filename.csv" 结果 - 错误信息 "没有这样的文件或目录"

从CSV加载数据

import csv
from gcloud import bigquery
from gcloud.bigquery import SchemaField
client = bigquery.Client()
dataset = client.dataset('dataset_name')
dataset.create()  # API request

SCHEMA = [
    SchemaField('full_name', 'STRING', mode='required'),
    SchemaField('age', 'INTEGER', mode='required'),
 ]
table = dataset.table('table_name', SCHEMA)
table.create()

with open('csv_file', 'rb') as readable:
    table.upload_from_file(
        readable, source_format='CSV', skip_leading_rows=1)

第三种方法 -

import csv
import urllib

url = 'https://storage.cloud.google.com/<bucket>/train.csv'


response = urllib.urlopen(url)
cr = csv.reader(response)
print cr

for row in cr:
    print row

结果 - 上述代码没有出现任何错误,但它显示了 Google 页面的 XML 内容,如下所示。我有兴趣查看火车 csv 文件的数据。

['<!DOCTYPE html>']
['<html lang="en">']
['  <head>']
['  <meta charset="utf-8">']
['  <meta content="width=300', ' initial-scale=1" name="viewport">']
['  <meta name="google-site-verification" content="LrdTUW9psUAMbh4Ia074-   BPEVmcpBxF6Gwf0MSgQXZs">']
['  <title>Sign in - Google Accounts</title>']

有人可以解释一下这里可能出了什么问题,以及我如何达到我的目标吗?非常感谢您的帮助!
非常感谢您的帮助!

1
看起来文件存储在需要身份验证的位置(即不是公共站点)。如果是这样,您必须在访问文件之前进行身份验证。无论您是否在浏览器上登录,都没有关系,因为Python不使用您的浏览器cookie。 - dispesi
^^^ 这就是答案 - Nick
2个回答

8

我假定您正在使用在Google Cloud Platform (GCP)上运行的Jupyter笔记本电脑?

如果是这样的话,您的机器上已经默认安装了 Google Cloud SDK。

有了这个设置,您有两个简单的选项来使用 Google Cloud Storage (GCS):

  • 在 Jupyter 中使用 gcloud/gsutil 命令

    写入 GCS: gsutil cp train.csv gs://python_test_hm/train.csv

    从 GCS 读取: gsutil cp gs://python_test_hm/train.csv train.csv

  • 使用 google-cloud python 库

    写入 GCS:

from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket('python_test_hm')
blob = bucket.blob('train.csv')
blob.upload_from_string('this is test content!')

从GCS读取:

from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket('python_test_hm')
blob = storage.Blob('train.csv', bucket)
content = blob.download_as_string()

您必须先安装Google Cloud Python包 - srodriguex
我发现upload_from_string将其存储为.txt文件而不是.csv文件。 - WJA

0
你的应用程序获取的登录页面实际上不是对象本身,而是一个授权重定向页面,如果与之交互,将继续提供对象。你应该查看Cloud Storage的文档,了解授权的工作原理,并查找访问存储桶/对象所使用的库或方式的授权详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接