Eine Erinnerung zum Lesen von Dateien zur Objektspeicherung aus Python-Code auf Notebooks in einem der Kerndienste von Watson Data Platform Data Science Experience (DSX) Dies ist eine Fortsetzung von Python-Code zum Lesen von CSV-Daten aus dem DSX-Objektspeicher, und diesmal ist es der Code zum Schreiben.
Im Fall des vorherigen Lesens waren die zu lesenden Daten klar und die Authentifizierungsinformationen wurden aus diesen Daten erhalten. Dieses Mal besteht der Zweck darin, das Ergebnis des Berechnungsprozesses zu zeichnen, sodass ein Container vorhanden ist, der dem Projekt entspricht. Trotzdem kann ich die Anmeldeinformationen nicht aus dem Dateinamen abrufen. Also was soll ich tun?
Wenn ich mich bei DSX anmelde und nach Anmeldeinformationen suche, die vom Datendienst in den Container geschrieben werden können, kann ich sie nirgendwo finden. Sie können jedoch Container-Anmeldeinformationen abrufen, indem Sie sich über Bluemix PaaS anmelden und nach Informationen zum Objektspeicher suchen.
Wechseln Sie aus der Liste der Dienste zu DSX-Object Storage.
Wenn die DSX-ObjectStorage-Dienstanmeldeinformationen angezeigt werden, werden die Dienstanmeldeinformationen für jeden Container erstellt, dh für jedes Projekt. Kopieren Sie daher die Dienstanmeldeinformationen des entsprechenden Containers und verwenden Sie sie in das DSX-Notizbuch.
Die Dienstanmeldeinformationen auf der Bluemix-Seite enthalten nicht den Containernamen. Daher habe ich diesen Teil manuell hinzugefügt und kann loslegen.
from io import BytesIO
import requests
import numpy as np
import json
# Anmeldeinformationen für die Objektspeicherung
credentials_5 = {
'auth_url':'https://identity.open.softlayer.com',
'project':'object_storage_bc6cdc85_586e_4581_8a09_8f01f7bdf3ed',
'project_id':'2a9de4c1d50944a49f1a46dd53394158',
'region':'dallas',
'user_id':'********************************',
'domain_id':'fb119f3e1bc0469dad2b253b317ec7ea',
'domain_name':'952993',
'username':'***********************************************',
'password':"********************",
'container': 'DefaultProjecttakarajpibmcom' <--- Von Hand hinzufügen
}
def Write_CSV_to_ObjectStorage(credentials, npdata,label, fileName):
"""This functions returns a StringIO object containing
the file content from Bluemix Object Storage V3."""
csvData = ""
# Beschriften Sie Daten, die in die erste Zeile der CSV geschrieben wurden
c = 0
for col in label:
if c > 0:
csvData = csvData + ','
csvData = csvData + col
c = c + 1
csvData = csvData + "\n"
# Konvertieren Sie Numpy-Array-Daten in Textdaten im CSV-Format
rows, cols = np.shape(npdata)
for row in a:
c = 0
for col in row:
if c > 0:
csvData = csvData + ','
csvData = csvData + str(col)
c = c + 1
csvData = csvData + "\n"
#Objektspeicherauthentifizierung
url1 = ''.join(['https://identity.open.softlayer.com', '/v3/auth/tokens'])
data = {'auth': {'identity': {'methods': ['password'],
'password': {'user': {'name': credentials['username'],'domain': {'id': credentials['domain_id']},
'password': credentials['password']}}}}}
headers1 = {'Content-Type': 'application/json'}
resp1 = requests.post(url=url1, data=json.dumps(data), headers=headers1)
# Beenden, wenn ein Authentifizierungsfehler auftritt
if resp1.status_code != 201:
return False, resp1.status_code
resp1_body = resp1.json()
# In Objektspeicher schreiben
for e1 in resp1_body['token']['catalog']:
if(e1['type']=='object-store'):
for e2 in e1['endpoints']:
if(e2['interface']=='public'and e2['region']=='dallas'):
url2 = ''.join([e2['url'],'/', credentials['container'], '/', fileName])
s_subject_token = resp1.headers['x-subject-token']
headers2 = {'X-Auth-Token': s_subject_token, 'accept': 'application/json'}
resp2 = requests.put(url=url2, headers=headers2, data = csvData )
result = True
if resp2.status_code != 201:
print "ERROR ", resp2.status_code
result = False
return result, resp2.status_code
# Maine
# Datengenerierung
x = np.linspace(0,1,60)
y = np.linspace(10,11,60)
# Zweidimensionales Array von Änderungen (x, y) an einem einzelnen Array
a = np.stack((x, y), axis=-1)
print a
# Datenetikett
label = ["Time","Data"]
# Im Objektspeicher speichern
rslt = Write_CSV_to_ObjectStorage(credentials_5, a, label,"testDataSet.csv")
print rslt
ew
Das erste Argument sind die Anmeldeinformationen. Das zweite Argument ist ein Array von num.py im Datenarray und wird in die erste Zeile der CSV-Datei mit der Bezeichnung der Datenspalte eingefügt. Als nächstes folgt der Dateiname (der Name des im Objektspeichercontainer gespeicherten Objekts).
rslt = Write_CSV_to_ObjectStorage(credentials_5, a, label,"testDataSet.csv")
Der Rückgabewert ist 201 Erstellt, wenn erfolgreich. Andernfalls wird es fehlschlagen.
Recommended Posts