2017-10-27 14 views
0

と結合ファイルへの書き込みライン、私はJSONを持っている、それは私が.vwファイルにそこからwritelinesする必要があり、次のキーPythonの:異なる種類

[u'domain', u'_timestamp', u'meta_tags', u'author', u'title', u'url', u'tags', u'flow', u'link_tags', u'content', u'post_id', u'flags', u'polling', u'published', u'hubs', u'_id'] 

が含まれています。 しかし、そのうちのいくつかは数字であり、いくつかの文字列です。そして、私はこのタイプを保存する必要があります。

また、私は、私はそれが動作しますが、次は私がライブラリを使用する必要があり、それは誤り、そのSTR(ターゲット[I私を返し

targets = train_target.target.values.tolist() 
with open('train.json') as inp_json, \ 
open('habr_train.vw', 'w') as out_vw: 
    for i, line in enumerate(tqdm_notebook(inp_json)): 
     data_json = json.loads(line) 

     if data_json['flow'] is None and data_json['author']['nickname'] is None: 
      res_line = str(targets[i]) + ' |title ' + data_json['title'] + ' |tags ' + ' '.join(data_json['tags']) \ 
       + ' |domain ' + data_json['domain'] + ' |flow None' + ' |author None' + ' |hubs ' + data_json['hubs'][0]['title'] + ' |num content_len:' + str(round(len(data_json['content'])/1000000, 1)) + ' month:' + str(datetime.fromtimestamp(data_json['_timestamp']).month) + ' hour:' + str(datetime.fromtimestamp(data_json['_timestamp']).hour) + '\n' 

     elif data_json['flow'] is None: 
      res_line = str(targets[i]) + ' |title ' + data_json['title'] + ' |tags ' + ' '.join(data_json['tags']) \ 
       + ' |domain ' + data_json['domain'] + ' |flow None' + ' |author ' + data_json['author']['nickname'] + ' |hubs ' + data_json['hubs'][0]['title'] + ' |num content_len:' + str(round(len(data_json['content'])/1000000, 1)) + ' month:' + str(datetime.fromtimestamp(data_json['_timestamp']).month) + ' hour:' + str(datetime.fromtimestamp(data_json['_timestamp']).hour) + '\n' 

     elif data_json['author']['nickname'] is None: 
      res_line = str(targets[i]) + ' |title ' + data_json['title'] + ' |tags ' + ' '.join(data_json['tags']) \ 
       + ' |domain ' + data_json['domain'] + ' |flow ' + data_json['flow'] + ' |author None' + ' |hubs ' + data_json['hubs'][0]['title'] + ' |num content_len:' + str(round(len(data_json['content'])/1000000, 1)) + ' month:' + str(datetime.fromtimestamp(data_json['_timestamp']).month) + ' hour:' + str(datetime.fromtimestamp(data_json['_timestamp']).hour) + '\n' 

     else: 
      res_line = str(targets[i]) + ' |title ' + data_json['title'] + ' |tags ' + ' '.join(data_json['tags']) \ 
       + ' |domain ' + data_json['domain'] + ' |flow ' + data_json['flow'] + ' |author ' + data_json['author']['nickname'] + ' |hubs ' + data_json['hubs'][0]['title'] + ' |num content_len:' + str(round(len(data_json['content'])/1000000, 1)) + ' month:' + str(datetime.fromtimestamp(data_json['_timestamp']).month) + ' hour:' + str(datetime.fromtimestamp(data_json['_timestamp']).hour) + '\n' 

     out_vw.write(res_line.encode('utf-8')) 

を使用target

url  target 
vk.com 0.934250 

の値を持つファイルを持っています])は浮動小数点数にする必要があります。

値の種類を保存する方法はありますか? どうすれば修正できますか?

+0

はエラートレースバックを投稿してくださいすることができますか? –

答えて

0

代わりに使用しますが、エラー

のこれらの種類を避けるためにformatを使用することができます連結演算子:

res_line = '{0} |title {1} |tags {2} |domain {3} |flow None |author None |hubs {4} |num content_len: {5} month: {6} hour: {7}\n'.format(str(targets[i]),data_json['title'], ' '.join(data_json['tags']), data_json['domain'], data_json['hubs'][0]['title'], str(datetime.fromtimestamp(data_json['_timestamp']).month), str(datetime.fromtimestamp(data_json['_timestamp']).hour)) 
関連する問題