4.データをファイルに書き出す - nsaku/xrepo-api-tutorial GitHub Wiki

ここでやること

テキストをファイルに書き出す方法を解説します。

必要なデータをファイルに書き出しすことで、解析結果を形に残しておいたり、Excelでさらに解析したりなど、活用の幅が広がります。

ファイルを読み込む方法は、別途解説します。

まずはAPIでデータを取得

前項で行ったように、食レポAPIでデータを取得し、pythonのデータとして格納します。

test3.pyファイルを作り書いてゆきましょう。

import requests

url = "http://metabolites.in/foods/api/dl-info-peaks/01026"

file_info = requests.get( url ).json()

# -- これ以降で出力

print( file_info )
print( file_info["name"] )
print( file_info["size"] )

上記では、responseを得る部分とそれをjsonに変換する部分とを一気に行っています。

以下のような正しい実行結果がえられれば成功です。

{'name': '01026_peaks.zip', 'size': 2.530384}
01026_peaks.zip
2.530384

うまくいかない場合や、操作が分からない場合は、前項までをご参照ください。


データを整形して出力

結果をわかり易くファイルに残したいので、下記のように出力できるようにしようと思います。

File name: <tab> 01026_peaks.zip
File size (MB): <tab> 2.530384

上記で、はタブ文字「\t」を表しています。

まずはプログラム上で上記のテキストをつくって出力してみましょう。

上記のプログラムのうち、「# -- これ以降で出力」以下の部分だけを改変します。

print( "File name:\t" + file_info["name"] )
print( "File size (MB):\t" + str( file_info["size"] ) )

無事、以下のような結果が表示されたでしょうか?

File name:	01026_peaks.zip
File size (MB):	2.530384

プログラムの解説

ここでいくつかのポイントがあります。

  • タブ文字は「\t」で表されます。
  • 文字列は「"」ダブルクォーテーションか「'」シングルクォーテーションで囲みます。
  • 文字列を連結するときは、「+」記号を使います。
  • file_info["size"]には数字が入っているので、文字列と連結するときは、str()関数を使って、数字を文字列に変更しなければなりません。

特に4番目がポイントです。試しにstr()をつけずに実行してみてください。

print( "File size (MB):\t" + file_info["size"] )

以下のようなエラーが表示されたと思います。

Traceback (most recent call last):
  File "C:\Users\sakura\Desktop\python\test3.py", line 12, in <module>
    print( "File size (MB):\t" + file_info["size"] )
TypeError: must be str, not float

何行目でどんなエラーが起こっているかが分かるので、何かエラーがあったときは、エラー内容をよく読んだり、メッセージをググったりするとよいです。

ファイルに出力してみる

それでは、PCの画面上ではなく、ファイルに結果を保存してみましょう。

import requests

url = "http://metabolites.in/foods/api/dl-info-peaks/01026"

file_info = requests.get( url ).json()

# -- これ以降で出力

out_file = "out3.txt"        # -- これ以降を編集

fh_out = open( out_file , "w", encoding="utf-8" )             # 1)
fh_out.write( "File name:\t" + file_info["name"] + "\n" )                # 2)
fh_out.write( "File size (MB):\t" + str( file_info["size"] ) + "\n" )    # 3)
fh_out.close()                                                           # 4)

実行してみましょう。

============== RESTART: C:\Users\sakura\Desktop\python\test3.py ==============
>>> 

PC上には何も表示されません。しかし、test3.pyと同じフォルダに、「out3.txt」ができていると思います。 テキストエディタなどで、期待した結果が得られているかどうか確かめてください。

プログラムの解説

ここでのポイントは以下です。

  • 1)で、書き出すファイル名を指定して、ファイルをオープンし、それ以降「fh_out」という名前で扱えるようにしています。 これは「ファイルハンドラ」と呼ばれるもので、OS上のファイルという存在をプログラム内で扱えるようにしたもの、と考えるとよいでしょう。 ここでは、"w"というキーワードを指定して、このファイルハンドラを「上書き(write)用」としてオープンしています。まだファイルが存在しないのに「オープンする」という呼び方に違和感を感じるかもしれませんが、ただの作法ですので受け入れましょう。encoding="utf-8"で、文字エンコードをutf-8に指定しています。日本語が含まれるデータを扱う場合は、エンコードをそろえておくことが重要なので、いつもutf-8にしておくとよいでしょう。
  • 2)ファイルハンドラに対して、write()関数で、文字列を書き込んでいます。行の最後に"\n"という改行文字を指定しています。print()では、改行文字が自動的に付加されていましたが、write()では自分でつけてあげる必要があります。
  • 3)もう一行のデータを書き込んでいます。
  • 4)最終的に、close()を行っています。この時点でpythonプログラムとOS上の実際のファイルの関係が切断され、ファイルが出来上がります。オープンしたファイルは必ずクローズするのを忘れないようにしましょう。
⚠️ **GitHub.com Fallback** ⚠️