Python100本ノック 53本目~61本目
Python100本ノックを61本目まで進めたので、前回に引き続き、問題に関するメモや感想等を小分けして書いていきたいと思います。
53本目:以下の16進文字列が有名なGIFファイルであるか確認せよ。
問題: 以下の16進文字列をbytes変数に変換し、その先頭が、”GIF89a”(有名なGIFファイル)という文字列になっているか確認せよ。
16進数ダンプの復習でした。問題無く解けました。
バイト列として定義する場合、
b"~"
と定義しなければならない。バイト列と文字列→比較することはできない。
54本目:test.txtというファイルにtest1の内容を書き込みなさい
ファイル書き込みの課題でした。問題無く解けました。
55本目:test.txtをtest2変数に読み出し、test1とtest2が同じになっているか確認せよ
条件:with
を使うこと
問題無く解けました。q54とだいたい同じ設問でした。
56本目:次のテキストをbooks.csvというファイルに保存した後、その内容を変数booksに読み込み、booksの内容を表示しよう。
条件:csv
モジュールとそのDictReader
メソッドを使うこと
どちらも初めて使ったので、調べました。
公式リファレンスを見ながらでしたが、何とか解けました。
57本目:テクストファイルの中から、行番号で指定した行を読みたい
linecache
ライブラリは完全に初見でした。
これを使えばファイルの行数を一発で出せるようです...!
58本目:ファイルの行数を計算したい
ファイルを開いて地道に数える方法で解きました。
記事では、ファイルの各行を要素としたリストを返すメソッドのreadlines()
を使っていました。とてもスマートですね!
オプションとして、open
の中でrU
のモードを指定すると、OSによって異なる改行モードの問題を解決できるようです。
rU
:改行モードを無視できるファイル読み込みモード
59本目:many_books.dbというSQLiteデータベースを作り、その中にtitle(文字列)、"author"(文字列)、"year"(整数)というフィールドをもつbookというテーブルを作れ
条件:sqlite3
モジュールを使うこと
sqlite3
は全然使ったことが無かったので、メソッドを調べながら取り組みました。
sqlite3.connect()
データベースへの接続を開設する(ユーザー名、パスワード、サーバーアドレス、その他引数が指定可能)sqlite3.connect().cursor()
クエリーを管理するカーソルオブジェクトを作るsqlite3.connect().cursor().execute()
データベースに対してSQLコマンドを実行するsqlite3.connect().commit()
データベースの変更を保存(コミット)する
60本目:次のテキストをmany_books.csvというファイルに保存し、そのデータをbookテーブルに挿入せよ。
(記事内ではq61とありますが、記事内の設問番号は恐らくズレています...)
解答の方針が分からなかったので、記事内の解法を見て考えました。
記事内の解法を実行したら、UnicodeEncodeError
が出てしまいました...。
csvファイルの作成の段階で行うopen
で、encoding="utf-8"
を指定することで解決しました。
61本目:bookテーブルのtitle列を選択し、アルファベット順に表示せよ。
これも、解答の方針が分からなかったので、記事内の解法を見て考えました。
for row in db.execute(sql):
と書けるのが新鮮でした。
今回は、ファイルへの書き込みとデータベースの操作についてでした。
どちらも、機械学習を利用した開発で使いそうですね。
特に、ファイルへの書き込みで学習データの整形等ができるようにしておきたいです(卒論で使う可能性浮上)。
また、自分の解法と記事内の解法を比較する形でコードを書いてみています。
ぎとはぶに上げていこうかなと思います。