2021年01月03日
入出力 (2):テキストファイルの作成,読み込み
記事内容の出典:フリーテキスト「Python3入門」
このページの更新:2021/01/09
Google Colaboratory に対するファイル入出力のための準備
Google Colab. のノートブックから(Pythonプログラムから) Google Drive のファイルにアクセスすることができます.そのための準備作業について説明します.
まず,ノートブックのウィンドウの左端にある をクリック(下記)します.
←ウィンドウ左端の をクリック
これにより,ウィンドウの左側にフォルダの一覧(下記)が表示されます.
この中に表示されている アイコンをクリックすると,開いているノートブックに Google Drive が接続されます.この際に次のようなダイアログが表示されます.
右下の「GOOGLE ドライブに接続」をクリックすると接続が完了し,下図のようにフォルダ一覧の中に「drive」というフォルダが現れます.
フォルダ一覧の の左端の黒い三角形をクリックすると下図のように内容が展開されて表示されます.
「drive」の下の「MyDrive」が Google Drive としてデータを保存するフォルダで,容量の許す限りデータを配置,保存することができます.また,Google Colab. のノートブックは「MyDrive」の中の「Colab Notebooks」のフォルダに保存されています.
以上のような作業で Google Drive をノートブックに連携させることを「Google Drive をマウントする」と言います.
ノートブックに Google Drive を一度マウントすると,基本的には,ノートブックを再度使用する際もマウントされた状態になっています.
■ ファイルやディレクトリのパスについて
Pythonのプログラムからファイルやディレクトリ(フォルダ)にアクセスするには,その対象を意味するパス(path)で表現したものを用います.パスとは,ストレージ(ディスクなど)に保存されているファイルやディレクトリの場所を書き綴ったもので,スラッシュ「/」や日本円記号「¥」(あるいはバックスラッシュ「\」)で区切った表現の文字列です.
例えば,上の例で示した Google Drive 上のディレクトリ「Colab Notebooks」のパスを表す文字列を調べるには次のようにします.まず,フォルダ一覧の中の
をマウスで右クリックします.すると下図のようなメニューが表示されるので「パスをコピー」を選択します.
これで,ディレクトリ「Colab Notebooks」のパスが取得できたのでノートブックにペースト(貼り付け)しましょう.(次の例)
pname = '/content/drive/MyDrive/Colab Notebooks'
この例では,変数 pname にパスの文字列を与えています.(クオート文字の間にパスをペーストしました)
このパスが意味することは
最上位のディレクトにある「content」フォルダの下に「drive」フォルダがあり,更にその下に「MyDrive」フォルダがある.その下に「Colab Notebooks」フォルダがあり,これの在り処を表したものである.
ということです.
パスの文字列は長いものになることが多く,この例のように,変数に割り当てておくと便利です.
テキストファイルを出力する方法 (1):print,write
■ Fileオブジェクトについて
ファイルをPythonプログラムから扱うには,対象のファイルを示す File オブジェクトを作ります.そのために open 関数を使用します.
open( 出力ファイルのパス, 'w' )
この結果として Fileオブジェクトが得られるので,それを変数などに受け取っておきます.
では実際にこの作業を実行してみましょう.先の例で示した「Colab Notebooks」フォルダの下に「out01.txt」というファイルを出力用に作成します.このファイルのパスは次のようにして作成することができます(次の例)
fname = pname + '/out01.txt'
print( fname )
実行結果:
/content/drive/MyDrive/Colab Notebooks/out01.txt
これで変数 fname に出力用ファイル「out01.txt」のパスができたので,このファイルを示す File オブジェクトを作成します.(次の例)
f = open(fname,'w')
これで出力ファイルの File オブジェクトが変数 f に作成されました.後は,これに対して何か出力処理を実行すると,出力ファイルにそれらが書き込み(保存)されます.
■ print 関数を使ってファイルに出力する方法
print 関数はノートブックやターミナルウィンドウに対して出力をするのが基本的な使い方ですが,出力先をファイルにすることができます.その場合は,print が出力した内容のテキストファイルが出来上がります.具体的には次のように記述します.
print( 出力値の並び, file=Fileオブジェクト )
では,先の例で作成した File オブジェクト f に対して出力してみましょう.(次の例)
print( '一行目', file=f )
print( '二行目', file=f )
print( '三行目', file=f )
print( '四行目', file=f )
出力はファイルに向けられたので,表示はされません.
■ ファイルのクローズ
出力の終わったファイルは close メソッドでクローズします.(次の例)
f.close()
これで出力処理が完了です.この結果,ファイル一覧の「Colab Notebooks」フォルダの下に「out01.txt」というファイルができていることが確認できます.(下図)
テキストファイルの内容を確認するには,そのファイルのアイコンをダブルクリックします.すると下図のようにウィンドウの右端にテキストファイルの内容が表示されます.
図中の「×」をクリックするとファイル内容の表示が閉じます.
■ write メソッドによるファイル出力
File オブジェクトに対して write メソッドを実行する形でもテキストファイルへの出力ができます.
File オブジェクト.write( 出力する文字列 )
出力のための一連の流れは,先に説明した print による場合とよく似ています.実行例を次に示します.
fname = pname + '/out02.txt' # 出力ファイル名
f = open(fname,'w') # ファイルを開く
f.write('Pythonは') # ここから出力処理
f.write('機械学習,')
f.write('人工知能の分野で')
f.write('よく用いられる言語です.')
f.close() # ファイルを閉じる
これでテキストファイル out02.txt が作成されます.
print による出力の場合と異なるのは,write メソッド実行後に改行処理がされないことです.out02.txt の中身を確認すると次のようになっています.
write メソッドを使用する際の改行処理には,エスケープシーケンスの「\n」を使います.
テキストファイルを出力する方法 (2):pathlib
pathlib ライブラリを使用すると更に簡単な形でファイル出力ができます.このライブラリでは,ファイルのパスを Path オブジェクトとして扱います.これの使用に先立って
from pathlib import Path
として必要なモジュールを読み込む必要があります.Path オブジェクトは,次のようにしてパスの文字列から作成します.
Path( パスの文字列 )
具体的なプログラムを次に示します.
from pathlib import Path # ライブラリの読み込み
p = Path( pname+'/out03.txt' ) # ファイルを示すPathオブジェクトの作成
これで Path オブジェクトが変数 p に得られました.この p に対して write_text メソッドを実行するとテキストファイルの出力ができます.(次の例)
# テキストデータの作成
txt = '''Pythonには多くのライブラリが提供されており
ソフトウェアの開発がやりやすいです.'''
# 出力処理
n = p.write_text(txt)
このように,open,close の処理が必要ありません.write_text メソッドの戻り値は出力した文字数(制御文字を含む)で,この例では変数 n にその値を受け取っています.この値を確認してみましょう.(次の例)
n
実行結果:
43
改行のエスケープシーケンスを含めて43文字出力したことがわかります.
テキストファイルから入力する方法 (1):read
■ 入力用の Fileオブジェクトについて
保存されているテキストファイルから入力用の File オブジェクトを作るには,次のような形で open 関数を使用します.
open( 入力用ファイルのパス, 'r' )
open 関数の2番目の引数に 'r' を与えます.この結果として入力用の Fileオブジェクトが得られるので,それを変数などに受け取っておきます.
入力用の File オブジェクトに対して read メソッドを実行すると,その内容が読み込まれて文字列の形で得られます.
では実際にこの作業を実行してみましょう.先の例で作成した「out01.txt」というファイルを入力用に開いて内容を読み取ります.(次の例)
fname = pname + '/out01.txt' # 入力ファイル
f = open( fname, 'r' ) # ファイルを開く
txt1 = f.read() # 内容を読み込む
f.close() # ファイルを閉じる
これで変数 txt1 にファイルの内容が得られたのでそれを確認してみましょう.(次の例)
txt1
実行結果:
'一行目\n二行目\n三行目\n四行目\n'
改行コードを含めた形で,ファイルの内容が得られています.もちろんこれを print で表示すると複数行のテキストとして表示されます.(次の例)
print( txt1 )
実行結果:
一行目
二行目
三行目
四行目
テキストファイルから入力する方法 (2):pathlib
pathlib の Path オブジェクトを使用すると,open,close の処理を記述することなくテキストファイルの内容を読み込むことができます.pathlib の利用に際しては,先に説明した形で必要なものを読み込んでおきます.
先の例で作成したテキストファイル「out03.txt」を pathlib の機能で読み込む例を示します.(ライブラリは既に import 済みであるとします)
p = Path( pname+'/out03.txt' ) # ファイルを示すPathオブジェクトの作成
txt3 = p.read_text() # ファイル内容の読み込み
print( txt3 ) # 内容確認
実行結果:
Pythonには多くのライブラリが提供されており
ソフトウェアの開発がやりやすいです.
読み込んだ複数の行を分解する方法
上に説明した方法でテキストファイルの内容を読み込むと,多くの場合,複数の行を改行コード「\n」で連結した文字列として得られます.このような文字列データを改行コードで分割して1行1行を分離するには splitlines メソッドを使用します.
文字列データ.splitlines( )
先の例で実際にファイルから得られたデータ txt3 を分離してみましょう.
tlst = txt3.splitlines()
print( tlst )
実行結果:
['Pythonには多くのライブラリが提供されており', 'ソフトウェアの開発がやりやすいです.']
行毎に分離されたものが変数 tlst にリストの形で得られています.
Python3 の基礎 − 超入門・再入門 −
【このカテゴリーの最新記事】
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/10446939
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック