【実践試験Tips.9】学習のポイント 特定データフォーマットとインターネット上のデータの扱い

こんにちは、Pythonエンジニア育成推進協会 顧問理事の寺田です。私は試験の問題策定とコミュニティ連携を行う立場です。

実践試験Tipsは、当協会のPython3エンジニア認定実践試験を受験される予定の方に向けて、何回かに分けてちょっとした情報をお伝えしていく目的で作成しています。

前回は、主教材Chapter10「汎用OS・ランタイムサービス」と、Chapter11「ファイルとディレクトリへのアクセス」の章の学習のポイントを解説しました。

今回は、Chapter13「特定のデータフォーマットを扱う」と、Chapter14「インターネット上のデータを扱う」の2章の学習ポイントについてお話します。

なお、Chapter12からの出題はありませんので解説としては省略しますが、学習という点においては、各自で別途読んでおいていただければと思います。

■学習のポイント:Chapter13、Chapter14

Python3エンジニア認定実践試験は、主教材「Python実践レシピ」(技術評論社)の中から出題されます。

出題範囲については以下のページをご確認ください。

さて、書籍も最後のほうになり、ここまできたらより実践的な内容になってきています。普段からこの分野に触れている人と触れていない人で、それぞれ得意・不得意と別れるかと思います。

主教材のChapter13は「特定のデータフォーマットを扱う」、Chapter14は「インターネット上のデータを扱う」という内容になっています。各章からの出題は2問(5%)ずつの合計4問(10%)です。

この章あたりからサードパーティ製パッケージの紹介がかなり含まれてきますが、サードパーティ製ライブラリに関する出題はされません。標準ライブラリでできる範囲が対象となります。

つまり、Chapter13では、標準ライブラリとして1節でCSV、2節でJSONが扱われています。それ以降はすべてサードパーティ製ライブラリになりますので、最初の2節分が出題対象ということになります。

Chapter14では、1節のurllib.parse、2節のurllib.request、4節のBase64が対象です。3節のRequests、5節のemailは除外されます。

■押さえておきたいポイント

ではここから各節のポイントをお話ししていきます。

▼Chapter13:特定のデータフォーマットを扱う

・13.1 CSVファイルを扱う

テキストフォーマットでカンマ区切りのものをCSVファイル、タブ区切りのものをTSVといいますが、この2種類のファイルをcsvモジュールで取り扱うことができます。

データ分析やデータ加工などをしたい場合、Excelやpandasを使うほどではないものの、CSVで表現できるものはたくさんありますが、表形式のものを扱いたいのであれば、csvモジュールを使ってやるというようになっています。

実はCSVはいろいろな仕様・フォーマットがありますが、Pythonの場合はExcelが出すCSVを標準のフォーマットとして扱えるようになっています。それ以外の書式を使いたい場合はオプションを使用します。

例えば、CSVファイルを読み込み、カンマをタブ区切りのTSVファイルに変換する処理を行い、読み込ませると、そのあとは1行ずつデータがPythonのオブジェクトとして返されますので、そのままPython上でデータを扱えるようになります。

また、辞書を用いたCSVファイルの読み込みによって項目名を意識した辞書型としてデータを返す機能があるため、データとして非常に安定しますので、Pythonで扱いやすくなります。それに加えて、PythonのオブジェクトからCSV形式に書き出す機能もあります。

この辺は実際にコードを動かして試していただければわかるかと思います。

・13.2 JSONを扱う

JSONフォーマットは、Pythonでは辞書とリストの塊のようなものになりますが、これらをテキストファイルやストリームデータとして扱うことができます。特にインターネット上のAPIではよく使われているフォーマットで、最近ではログなどもJSONで書き出されるようになっています。

JSONも、慣れてしまえばその扱いは難しいものではないと思います。

Pythonの辞書とリストの塊だと捉え、どうエンコード、デコードしていくのか、Pythonのオブジェクトにするのか、JSONのフォーマットに書き出すのか、という経験を積み重ねていけば少々の工夫で簡単に使いこなせるようになるはずです。

・CSVとJSONの使い分け

CSVは表構造を扱うもので、一方のJSONはツリー構造(階層構造)に向いています。どちらの方がフォーマットとして向いているのかを使い分けてもらえればと思います。

▼Chapter14:インターネット上のデータを扱う

14.3のRequestsは試験範囲外のため説明しませんが、実務では結構使用する機会がありますので、勉強はしておいた方が便利かと思います。ではそれ以外の項目について以下で説明していきます。

・14.1 URL・クエリ文字列をパースする urllib.parse

urllib.parseライブラリを使用してURLやクエリをパースします。

例えば、完全URL(例:https://www.pythonic-exam.com/)があった場合、urllib.parseライブラリを使うことで、これを分解してPythonで扱いやすくできます。

urllib.parseには様々な機能があり、URL上でよく使われるクエリ文字列をパースしたり、クエリ文字列をエンコードしたりといったことが可能です。これはURLに通信を通す際、アスキー文字列を使うことになっていますが、URLに日本語が含まれていても、urllib.parseのurlencode()を使えばアスキー文字列に変換してくれます。

urllib.parseにはエンコードだけでなく、quote() や quote_plus()という機能もありますので、この辺も押さえておいてほしいところです。

文字列の変換や組み立てにおいては、Python標準の文字列や正規表現を使えばある程度の処理は可能ですが、URLの文字列やクエリ文字列の処理に関しては専用のライブラリを使用した方が安全に安定してパース出来ますので、使いこなせるようにしましょう。

・14.2 URLを開く urllib.request

URLを開くにはインターネット上の先のデータを、URLにアクセスして取得し、ブラウザに表示する必要があります。この際に使用されるのがurllib.requestという標準ライブラリです。

urlopen()の中に、URLを記述するだけで、HTTP通信を行い、データをとってくるといったことができます。この節ではGETやPOSTなどのメソッドの使い方も学ぶことになります。

また、urllibで使用するレスポンスモジュール(urllib.response)を使うことで、通信が戻ってきたときの成功・失敗をステータス表示することができます。

GETやPOSTはインターネットの世界では当たり前に使われている技術で、実際にブラウザの中で起きていることをPythonからやるときに使用するのがurllibです。この辺りまで勉強していただければいいかなと思います。

・14.4 Base16、Base64などへエンコードする base64

日本語のような様々な表現ができるような文字列の場合、データを何かに書き出したり、やり取りしたりする際にはそのままの状態で扱うといろいろと不便な状態に陥ることがあります。そういったときにbase64モジュールをしようすると、データをエンコードしたり、逆にデコードしたりすることができます。こういったことはインターネット上でデータをやり取りする際によく使用されます。

書籍にはサンプルコードが掲載されていますので、これを動かしてもらえればどういった動作をするものなのか、ピンとくるかと思いますので、試してもらい、簡単にでもおさらいをしておいてください。

■さいごに

この2章分の試験範囲はここまでになります。

理解さえしてしまえば取りこぼしのしにくい、比較的点数の取りやすい章だと思いますし、実践で経験がある方にとってはそう難しい内容ではないと思います。

また、まだ各種フォーマットやHTTP通信に慣れていない方にとっては少し勉強の範囲が広いように感じるかもしれませんが、Pythonを扱うのであれば知っていてほしい範囲です。

サンプルコードを動かしながら、学んでいってもらえればと思います。

PAGE TOP