Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Python・ファイル操作】~ファイルへの書き出し~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

おはようございます!Shotaです。

今日も早速、Pythonに関する記事を書いていきます。

 

【目次】

 

 

書き出しとwriteメソッド

writeについて

テキストへの書き出しは、ファイルオブジェクトの「write」というメソッドで行います。これは以下のように実行します。

 

ファイルオブジェクト.write(書き出す文字列)

 

引数には、ファイルに書き出す値を文字列で指定します。これで、その文字列がそのままファイルに書き出されます。writeは、戻り値として書き出した文字列のサイズを整数値で返します。これは必要なければ受け取る必要はありません。

 

テキストを書き出す

以下のようにコードを書いて実行してみましょう。

  

#ファイルへの書き出し
msg = 'Hello world'
with open('sample.txt', 'w') as target:
    f.write(msg)
    print('end.')

 

実行すると、sample.txtに文字列「Hello world」が出力されます。

ここでは、以下のようにファイルへの書き出しを行っています。

 

with open('sample.txt', 'w') as f:
    f.write(msg)

 

with openでファイルを開いて、変数fにファイルオブジェクトを設定しています。そしてwriteでテキストを書き出します。わずかこの2行だけでテキストファイルへ書き出すことができます。

 

連続で書き出す
#ファイルへの連続書き込み
with open('sample.txt', 'w') as f:
    while True:
        msg = input('input text:')
        if msg == '':
            break
        f.write(f'{msg}\n') #\nで改行できる
    print('save all message!') 

 

今度は入力したテキストを次々とファイルに書き出していくようにしていきました。終了する際には、何も書かずにEnterキーを押すとプログラムを終了します。

終了したら、sample.txtを開いて中身を確認してみましょう。

 

▼実行結果

input text:aaa
input text:bbb
input text:ccc
input text:
save all message!    

 

実行した後、sample.txtの中身を確認すると以下のように出力されていることがわかります。 

aaa
bbb
ccc

 

while構文を使って、inputで入力を受け取りwriteで書き出すのを繰り返しています。入力したテキストが空ならば、breakでwhileを抜け出し終了します。

 

ユニコードで出力する

 先程のサンプルを出力した際に、日本語を入力するとどうなったでしょうか?

実は、問題なく出力できます。ただし、出力されるテキストは「shift-jis」エンコードされます。

 ユニコードを利用する際には、入力された値をエンコードして利用する場合があります。これは、先に登場したcodecsモジュールを利用します。codecs.openでエンコードを指定してファイルオブジェクトを取得し、writeすればユニコードで保存できます。

先程のサンプルを、ユニコードで保存するように修正してみましょう。

 

# ファイルへの連続書き込み
import codecs
with codecs.open('sample.txt', 'w', 'utf-8') as f:
    x = 1
    while True:
        msg = input('input text:')
        if msg == '':
            break
        f.write(f'{x}: {msg}\n')
        x += 1
    print('save all messages.')

 

▼実行結果

input text:あああ
input text:いいい
input text:ううう
input text:
save all messages.

 

 ▼sample.txtの中身

1: あああ
2: いいい
3: ううう

 

これを実行し、日本語のテキストを入力して下さい。そして終わったら、sample.txtを開いて中身を確認してみましょう。テキストが保存されていることがわかります。

 

まとめ

【本日のまとめ】

  • ファイルへの書き出しは、open関数で'w'などを指定して書き出し、writeなどで書き出す。
  • ユニコードで日本語を出力する際には、codecs.openを使ってUTF-8エンコード指定してファイルを開く。

 

 

本ブログでは、こんな感じでPythonにまつわる情報や基本的な知識、Pythonの操作方法やニュースをたくさん紹介していきます。毎週日曜日に、普段とは趣向を変えて有名な自己啓発本・ビジネス書を要約・考察するブログを書いていきます。

この記事がいいと思った人はSNSにシェアしてくれると非常に嬉しいです!

明日も本日に引き続き「ファイル操作」を解説していきます。

今日も最後まで読んでくださりありがとうございました!

 

【参考図書】

gihyo.jp