4

目标 - 读取上传到谷歌云存储存储桶中的csv文件。无法读取上传到谷歌云存储存储桶中的csv文件

环境 - 在主节点上运行使用SSH实例的Jupyter笔记本。在Jupyter笔记本上使用python尝试访问上传到谷歌云存储存储桶的简单csv文件。

途径 -

1的方法 - 编写一个简单的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文件。示例代码如下所示。下面的代码不是实际的代码。在我的版本的代码对谷歌云存储的文件被称为“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 

结果 - 上面的代码不会导致任何错误,但它显示了谷歌网页的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。 – celestialroad

+0

^^^这是答案 – Nick

回答

3

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

有了这个设置,你有2点容易的选择与谷歌云存储工作(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() 
0

在您的应用程序获取页面的标志是不实际对象 - 这是一个n auth重定向页面,如果与之交互,将继续为对象提供服务。您应该查看Cloud Storage上的documentation以了解身份验证的工作方式,并查找您用来访问存储桶/对象的库或手段的身份验证详细信息。