コピー2018.09.14スポンサーリンクPythonプログラミングの基礎を学んできて、データの処理の方法はわかったと思います。ターミナルなどの画面に表示したり、出力する前ならメモリ内にデータが保持されています。パソコンの電源を落としてしまうとせっかく処理したデータは消えてしまって使えなくなります。データをいろんな目的に使うためには、あとで使えるようにしなければいけません。これを永続性などと言いますが、ファイルに保存することは誰でもすでにいろんなところでやっていますね。ここではファイルの作成から入出力までの操作について学んでいきましょう。目次ファイルの作成ファイルを実際に作成してみよう!withステートメントでファイルを自動クローズファイルの読み込みread()でファイルを読み込むchunkの区切りで読み込むreadline()で1行づつ読み込む読み込む位置の変更seek()で読み込む位置を移動するまとめスポンサーリンクファイルの作成データの保存の単純なものとしてはファイルです。ファイル名を指定して、そこにデータを格納し、データを読み出したり、ファイルに書き込んだりして作業するわけです。ファイルを作成して行きましょう。ファイルの保存場所は、自分の作業で都合の良いディレクトリにしましょう。ここではmy_fileというフォルダを用意して作業を進めていきます。このディレクトリでPythonを動かすことになります。今は何のファイルも無い状態です。ファイルを扱うには、まずファイルを開くことから始めます。ファイルを開くことでファイルが作成されるわけです。次の形でファイルを作成します。“モード”)open()を使ってファイル名をつけて、どんな操作のモードでファイルを開くかを指定して開き、それをオブジェクトで保持するという形です。ファイルをopenするモードの部分には次のようなものが入ります。r:読み出しw:書き込み(上書きされます。ファイルが無い場合は新規ファイル作成。)x:ファイルが存在しない時だけ書き込みa:末尾に追記モードの2文字目にはファイルのタイプ(t:テキスト、b:バイナリ)を入れたりします。実際にファイルを作成してみましょう。ファイルを実際に作成してみよう!作業はターミナルを使ってやってみましょう。作業ディレクトリに移動して、Pythonを起動します。(ここでは、Atomのターミナルを使って作業していきます。Mac本体のターミナルから起動してもいいですし、対話型シェルを使っても構いません)作成するファイル名をここでは、practice.txtというテキストファイルにしてみます。このとき、すでにこのファイルがあると書き換えられてしまうので注意しましょう。次のコードをターミナルから入力してみましょう。"w")f.write("Python")f.close()ファイルを作ってfというオブジェクトに入れています。それにwrite()を使って「Python」という文字列を書き込んでいます。最後にclose()を使ってファイルを閉じています。この最後にclose()でファイルを閉じることを忘れないようにしましょう。実際に入力してみるとこうなります。f.write()のところで、「6」と表示されていますが、これは書き込んだ文字数のことです。左側のディレクトリ表示のところに、practice.txtが新しく作成されています。このファイルを開くと中に「Python」と書き込まれているのがわかります。この作業、ターミナルのPythonシェルから行いましたが、コードをファイルに書いて実行しても同じ結果になります。make_file.pyというファイル名でコードを保存してAtomで実行してみます。わかりやすいように作成中のテキストファイルを横に並べて表示させています。「Python」ではなく「Python!」とコードに書いて実行しまいたが、上書きされているのがわかります。同じ名前のファイルが存在すると、上書きされるので注意しましょう。今度はモードを”a”にしてみます。modeを"a"f.write("Python!")f.close()他のコードはそのままで実行するとこうなります。前の結果の後ろに「Python!」と追記されているのがわかります。今度は次のように書き換えてみます。"ファイルの作成をしています。"ファイルの作成をしています。file=f)f.close()file=fでオブジェクトを指定して、print()で書き込みをしています。書き込む内容は、変数sに代入してみました。わかりやすいように、「Python!」のところに「\n」を使って改行を入れています。実行するとこうなります。書き込みされているのがわかりますね。print()はsepやendのオプションももちろん使えます。print文に関してはこちらを復習しましょう。【Python入門】printで出力してみよう!sepとendの指定は?Python入門の学習として、printで出力するところから始めてみましょう。難しくもなんともありません。ついでにオプションのsepとendの指定の方法についても合わせて触れておきたいと思います。code-graffiti.com2018.08.06ここでは、書き込みにはprint()ではなくwrite()を中心に使っていくことにします。withステートメントでファイルを自動クローズここまではファイルの操作で、このコードのように最後にclose()を置いていました。"w")f.write("Python!\n")f.close()close()の記述を忘れるとメモリを使用したままになってしまうので、必ず書かないてファイルを閉じないといけないのですが、やはり忘れてしまうこともあります。そこでwithステートメントという便利な仕組みがPythonにはあります。with文を使って、上記のコードを書き換えてみましょう。f:f.write("Python!\n")withを使ってopenで開き、asでオブジェク名を指定してコロンを置きます。インデントしてブロックコードにwrite()を書きます。close()は必要ありません。実行するとこうなります。withはちょっと見慣れない感じですが、close()を使わなくてもファイルを自動的に閉じてくれるので、open()を使って開く時はwithを使っていくようにした方がいいでしょう。スポンサーリンクファイルの読み込み次はファイルの読み込みをやってみましょう。復習もかねて、withステートメントを使って次のようなコードでファイルを作ってみましょう。f:f.write(sns)トリプルクォートで囲んで、複数のデータを改行を使って変数snsに入れています。これをwithを使ってファイルに書き込んでいます。実行するとこうなります。ファイルに書き込むことができました。このファイルの中身を読み込むにはどうすればいいのが見て行きたいと思います。read()でファイルを読み込む作成したファイルのデータを読み込むにはread()を使って同じようにコードを書いて行きます。モードは”r”になります。(”r”はreadの意味)上で作成さいたファイルを、次のコードで読み込んでみます。f:print(f.read())ファイルを作成する時と同じように、withステートメントでファイルを開きます。読み込みなのでモードは”r”にします。ファイルオブジェクトのfとして扱って、read()で読み込んだものをprint()で出力しています。これを実行すると、こうなります。読み込まれたデータがターミナルに表示されているのがわかります。してファイルを読み込むことができました。このread()のやり方はファイル全体を一気に読み込んでいるということに注意が必要です。これくらいのデータの容量ならまだ何も問題無いですが、ファイルの容量が数GBのようなものになると、それだけメモリの容量を消費してしまいます。chunkの区切りで読み込む何かの塊ごとに呼び出すようにすれば、メモリの消費がその都度になるので安全になります。そこでchunkを使います。(chunkは塊の意味です)次のようにコードを書き換えます。chukを3にして、3文字づつ取り出します。whileループでchunkの塊毎に処理します。塊がなくなったらループを抜けます。chukを3にして、3文字づつ取り出します。whileループでchunkの塊毎に処理します。塊がなくなったらループを抜けます。breakchunkを3にして、ここでは3文字づつ取り出すことにします。whileループを使って、read()にchunkを指定して塊ごとにprintで出力することを繰り返します。塊が無くなったら、breakでwhileループを抜けます。コードを実行するとこうなります。3文字づつ抜き出しているのがわかります。それぞれのライン毎に改行があり、print()での出力はデフォルトでは改行があるので、この改行もそれぞれ1文字と数えられているので、こういう出力になっています。このchunkはデータのパケットのやり取りなどでも使うので覚えておきましょう。readline()で1行づつ読み込む次は1行づつ読み込む方法です。これにはreadline()を使います。コードを次のように書き換えてみましょう。デフォルトのend="\n"を削除しています。デフォルトのend="\n"を削除しています。line:breakやり方はほとんど同じで、オブジェクトをleadline()で1行づつ取り出してwhileループを使ってprintで出力を繰り返しています。読み出す行のデータが無くなったらbreakでループを抜けています。ここではprint()にendオプションを使って行の最後にデフォルトで入っている改行を削除しています。実行するとこうなります。結果は一度に読み込んだ時と同じですが、内部的には1行づつ処理されています。これは1行づつ詠み込む毎に何か別の処理を行うと行ったプログラミングに使えます。スポンサーリンク読み込む位置の変更ファイルの読み込みはいつも先頭から読み込むわけではありません。任意の位置のデータから読み込んだりすることは当然あります。ここでは、ファイル内の位置を管理して詠み込む方法を見ていきます。tell()を使うと、現在の位置が先頭からどの位置になるのか、オフセットを返してくれる関数です。同じファイルを次のようにtell()を使って開いてみましょう。f:print(f.tell())実行するとこうなります。現在、データの一番先頭にいるということです。この位置(ここでは先頭)から5文字読み込むには、read(5)とすればできることになっています。次のようにコードに加えてみましょう。f:print(f.tell())print(f.read(5))実行してみます。先頭から5文字を読み込んで出力しているのがわかります。seek()で読み込む位置を移動するでは、これに続けて「Faceboo」と出力させる場合はどうすればいいでしょうか。seek()を使うことでデータを読み込む位置を移動することができます。「Faceoo」のFの位置に移動したいわけですから、この位置を数えて見ると、0から始まって8番目になります。改行もカウントされていることに注意しましょう。なるとseek(8)で移動することになります。「Faceboo」は7文字ですからread(7)です。コードに追加してみましょう。f:print(f.tell())print(f.read(5))f.seek(8)print(f.read(7))実行するとこうなります。異動先からのデータが出力されているのがわかります。ちなみにseek()は、オフセット値を与えるだけなら先頭からの位置ですが、第2引数に1を入れると現在の位置から、2を入れると末尾の位置から数えた位置に移動することができるようになっています。ここの場合のようにtextファイルの読み込みに対しては第2引数は使えません。2)の場合だけ、最後の位置に移動することはできます。(Python3の挙動)スポンサーリンクまとめPythonでせっかく作ったデータも何もしなければ、パソコンの電源を落とすとデータは失われてしまいます。ならないようにデータを使えるように(永続化)しなければなりません。身近な方法はファイルとして保存することです。ファイルはopen()を使ってファイル名を指定し、書き込みのモードを指定して作成したり、書き込みをしたりすることができます。データの書き込みはwrite()やprint()でできますが、write()を使うのが一般的でしょう。open()で開いた場合は、最後に必ずclose()でファイルを閉じる必要があります。withステートメントでファイルを操作すれば、close()する必要はありません。自動でファイルを閉じてくれます。ファイルの読み込みはread()で行います。小さいデータなら問題無いのですが、巨大なデータをそのまま読み込む場合、メモリの容量を大量に消費してしまうので、chunkやreadline()を使って塊や1行づつ読み込むことも必要です。データはいつも先頭から読み込む訳ではありません。seek()を使うとデータを読み込む位置を変更することができます。-ちょこっとPEP8Pythonのコードの書き方について、PEP8に書いてあることのごく簡単な部分について実例を交えて見て行きましょう。決まり通りに書かなくてもプログラミングは動きますが、読みやすいコードを書いていく為にまずはこのあたりからはじめてみましょう。【Python】osモジュールとファイルシステムの操作MacやUNIXコマンドでターミナルを駆使してファイルやフォルダを作成したり削除したりする操作することができますが、Pythonでもそのような操作をosモジュールなどを使えば、様々なことが可能となっています。【Python】XMLファイルの読み込み書き込みPythonでCSVファイル以外にも構造化されたテキストファイルがあります。その1つがXMLフォーマットです。ここではXMLの書き込み、読み込みを行います。最近はJSON形式が多いですが、XMLテータのやり取りの場面はいまだに多いです。TCPPythonのsoketモジュールを使ってデータのソケット通信を簡単にやってみました。ネットワークがどのような仕組みで動いているのか通常は気にしませんが、知っておくとエラー発生時などに役に立つことがあります。-“w+”,”r+”Pythonのファイルの読み書きのモードには、これまで学んだもの以外に"w+"モードと"r+"モードがあります。"w+"はファイルに書き込んだデータを読み出すことができます。"r+"モードはファイルを読み出して書き込むことができます。minMaxLoc()OpenCVを使ったPythonでの画像処理について、静止画から物体を認識をするテンプレートマッチングという方法を扱います。これはテンプレートを画像全体に対してスライドさせて重なる領域を比較し、類似度の高い部分に注目して物体を認識します。notebookの基本的な使い方。CatelinaにAnacondaをインストールする(zshでの不具合対応)【Python】tkinterの使い方入門。notebookの基本的な使い方。CatelinaにAnacondaをインストールする(zshでの不具合対応)【Python】tkinterの使い方入門。Arrays【Python入門】クラスの継承、メソッドのオーバーライドとsuperスポンサーリンクタイトルとURLをコピーしました。