Python ファイルの読み込み

Python学習【365日チャレンジ!】91日目のマスターU(@Udemy11)です。

ホームベーカリーでパンを焼くと、朝からパンが焼けたいい匂いが漂ってくるので、それだけで幸せな気分になります。

ホームベーカリーで焼いたパン

スーパーで売ってるパン用の強力粉は量が少ないので、ネットで売ってた大袋の強力粉を購入してしまいました。

強力粉

日清製粉 強力粉
オーション 25kg

評価 4.5

虫がつかないかということが心配ですが、これで当分強力粉のストックの心配をしなくて良くなりました。

ちなみに、小麦粉の【強力粉】と【薄力粉】の違いは、タンパク質であるグルテンの含有量の違いで、グルテンを多く含む強力粉のほうがパン作りに適しているということだそうです。

それではさっそくPython学習をはじめましょう!

昨日の復習

昨日は、withステートメントでファイルを開く方法について学習しました。

組み込み関数のopenで上書きモードでファイル名を指定すればファイルを作成することができましたが、最後にcloseでファイルを閉じる必要がありました。

withステートメントを使えば、closeを使わなくても処理が終了した時点でファイルを閉じてくれます。

with open('text.txt', 'w') as f:
    f.write('How are you?')

withステートメントは、呼び出したときと処理が終了したあとに何かをさせることが可能なので、これから出番が多くなるということでした。

それでは、ファイルの読み込みを学習しましょう!

ファイルの読み込み

まずは、テキストファイルに複数行の文字列を入力したファイルを作成します。

t = """\
aaaaa
bbbbb
ccccc
ddddd
"""
with open('text.txt', 'w') as f:
    f.write(t)

このコードを実行すると、【text.txt】が作成されて、中身は次のようになっています。

4行目の最後の改行は、\を入れていないので、空白行が入っています。

aaaaa
bbbbb
ccccc
ddddd

このテキストファイルを読み込んでいきます。

with open('text.txt', 'r') as f:
    print(f.read())

出力結果

aaaaa
bbbbb
ccccc
ddddd

ファイルの読み込みもwithステートメントを使うことができ、readメソッドで、ファイルの中身をすべて表示することができます。

“””(トリプルクォーテーション)

この時点で、"""ってコメントアウトじゃなかったっけ?

と思う人がいると思うので、少し復習しておきましょう。

"""'''は、複数行にわたるコメントアウトのための記号でもあり、printや変数の定義の際に改行をそのまま認識させる使い方もあります。

行の始めにインテントなしで記述すれば、コメントアウトになるし、print("""a = """のような書き方をすれば、改行をそのまま認識させる文字列になります。

このあたりのことは、次のエントリーで説明しているので、参考にどうぞ。

1行ずつ読み込み

readでファイルの中身を一気に読み込みましたが、while文とreadlineを使って、1行ずつ読み込むことも可能です。

with open('text.txt', 'r') as f:
    while True:
        Line = f.readline()
        print(Line, end='')
        if not Line:
            break

while文覚えてますか?

条件がTrueの間は繰り返すってやつです。

このコードは、変数Lineに【text.txt】の行を順番に代入し、printによる改行を除いて出力することを繰り返して、変数LineFalseになればwhileループを抜けるということになります。

print出力は、最後に改行コードが入るので、end=''で改行を取り除いています。

なので、出力結果は、f.read()による出力と同じになります。

aaaaa
bbbbb
ccccc
ddddd

かたまりごとに読み込む

1行ずつ読み込みましたが、指定した文字の塊ごとに読み込むことも可能です。

IT用語では、ぶつ切りや塊といった意味の【チャンク(chunk)】という単語を使いますが、指定したチャンクごとに読み込んで出力することができます。

with open('text.txt', 'r') as f:
    while True:
        chunk = 2
        Line = f.read(chunk)
        print(Line)
        if not Line:
            break

出力結果

aa
aa
a

bb
bb
b

cc
cc
c

dd
dd
d

今回は、printend=''を指定してしまうと、printのあとの改行が省かれて、【text.txt】に記載されているとおりに出力されてしまい、チャンクごとに読み込まれているかどうかがわからないので、end=''を省いて出力しました。

ちなみに、【text.txt】内の改行がカウントされているため、3行目は、aと改行が一つのチャンクとして出力されています。

なんだchunkって?

今回のレクチャーでは、いきなりchunkという言葉が出てきたので、一瞬戸惑ってしまいました。

そんなときは、Goolge先生の出番で、調べてみるとすぐに答えを教えてくれます。

オンライン講座のUdemyに限らず、リアルな講座でもわからないことはまず、自分で調べてみることが大切です。

調べてみてわからなかったり、調べたことが合っているか不安な場合は、質問すれば答えてくれます。

リアルな講座の場合は、なかなか聞くことができないことも、オンライン講座のUdemyなら講師の方に訪ね放題ですし、レスポンスも早くてすぐに問題解決につなげることが可能です。

このあたりのインタラクティブなところがUdemyの人気の秘訣なので、まだUdemyの講座を受講されていないのなら、ぜひ、興味のある講座を受講されることをおすすめします。

私が現在受講している酒井さんのPython講座は一通りPythonを学習することができるので、おすすめですよ。

Udemy講師 酒井さん プログラミング Python

それでは、明日もGood Python!