DSX 개체 스토리지 기기에 CSV 데이터를 쓰기 위한 파이썬 코드

15805 단어 DSXPython
왓슨 Data Plaatform의 핵심 서비스 중 하나Data Science Experience(이하 DSX)의 노트북에 있는 파이썬 코드는 대상 저장 장치의 파일을 읽는 방법에 대한 메모로, DSX 개체 저장 장치에서 CSV 데이터를 읽는 파이썬 코드 속편으로, 이번에는 한쪽에 쓰는 코드다.
지난번에 읽었을 때 읽은 데이터가 명확하기 위해 그 데이터에서 인증 정보를 얻었고 이번에는 계산 처리 결과를 묘사하기 위해서였기 때문에 프로젝트에 대응하는 용기가 있어도 파일 이름에서 인증 정보를 얻지 못했다.그럼 어떻게 하면 좋을까요?
DSX에 로그인한 후 Data Service에서 컨테이너에 기록할 인증 정보를 찾았지만 아무 것도 없습니다.단, Bluemix PaaS에서 로그인하여 대상이 저장한 정보를 찾으면 용기의 인증 정보를 얻을 수 있다.
서비스 목록에서 DSX-ObjectStage로 전송합니다.

DSX-ObjectStorage 서비스 자격 정보를 표시하면 모든 용기, 즉 항목에 서비스 자격 정보를 생성하기 때문에 해당 용기의 서비스 자격 정보를 DSX의 Notebook에 복사하여 사용합니다.

이 블루믹스 측의 서비스 자격 정보에는 용기 이름이 없기 때문에 그 부분만 수동으로 추가하면 준비가 완료된다.
python 쓰기
from io import BytesIO  
import requests
import numpy as np
import json


# オブジェクトストレージの認証情報
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' <--- 手作業で追加する 
}


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 = ""
    # Label データをCSVの先頭行へ書き込み
    c = 0
    for col in label:
        if c > 0:
            csvData = csvData + ','
        csvData = csvData + col
        c = c + 1
    csvData = csvData + "\n"

    # Numpy配列データを CSV形式テキストデータへ変換
    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"

    # オブジェクトストレージ認証
    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)
    # 認証エラーが発生したら終了
    if resp1.status_code != 201:
        return False, resp1.status_code
    resp1_body = resp1.json()

    # オブジェクトストレージへ書込み
    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


# メイン

# データ生成
x = np.linspace(0,1,60)
y = np.linspace(10,11,60)

# 一本の配列に変更 (x,y)の2次元配列
a = np.stack((x, y), axis=-1)
#print a
# データラベル
label = ["Time","Data"]

# オブジェクトストレージへ保存
rslt = Write_CSV_to_ObjectStorage(credentials_5, a, label,"testDataSet.csv")
print rslt
ew

사용법 설명


첫 번째 파라미터는 인증 정보다.두 번째 매개 변수는 데이터 배열에서num.py의 배열이고 데이터 열의 탭에 CSV 파일의 시작 줄을 삽입합니다.다음은 파일 이름(객체 저장 컨테이너에 저장된 객체 이름)입니다.
rslt = Write_CSV_to_ObjectStorage(credentials_5, a, label,"testDataSet.csv")
반환 값이 성공하면 201Created가 추가됩니다.그 외에는 실패할 것이다.

좋은 웹페이지 즐겨찾기