无法读取谷歌云存储桶上传的csv文件

时间:2016-08-22 15:58:18

标签: python google-cloud-storage google-compute-engine google-cloud-platform jupyter-notebook

目标 - 阅读在Google云端存储分区上传的csv文件。

环境 - 在主节点上使用SSH实例运行Jupyter笔记本。在Jupyter笔记本上使用python试图访问上传到谷歌云存储桶的简单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 Package尝试访问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)

第3种方法 -

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内容,如下所示。我有兴趣查看train 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>']

有人可以对这里可能出现的错误有所了解吗?我如何实现目标?非常感谢您的帮助。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:6)

我假设您正在使用Google云平台(GCP)中的计算机上运行的Jupyter笔记本电脑? 如果是这种情况,您将在该计算机上运行Google Cloud SDK(默认情况下)。

通过此设置,您可以使用2个简单的选项来使用Google云端存储(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()

答案 1 :(得分:0)

您的应用提取的登录页面实际上并不是对象 - 它是一个身份验证重定向页面,如果与之交互,将继续为该对象提供服务。您应该查看云存储上的documentation,了解身份验证的工作原理,并查找用于访问存储桶/对象的库或方法的身份验证详细信息。