LoginSignup
1
1

More than 1 year has passed since last update.

pythonのテキストデータ読込の仕組みとopen関数を整理する。

Last updated at Posted at 2022-08-02

初めに。

どうもpython歴3か月の者です。
今回は一度学習してよく理解できずにスルーしていたデータ読込(テキストファイル)についてリベンジしたいと思います。
最初に学習した時より理解できたのでその忘備録やアウトプットにでも。
自分はpythonにおけるデータ読込の理解に苦労したので、このような方に少しでも楽になればと。

初めて学習した時面喰いましたよね。excelやwordを開く、みたいに簡単にいかないので。
ファイルをダブルクリックで出来る事が、pythonだと4行くらいのコードが必要だなんて。

環境

win11 / google colab

今回扱う参照コード

最初に今記事にて扱うコードを紹介致します。

file = open("a.txt")
text = file.read()
print(text)
file.close

with open("a.txt","r") as f:
  s = f.read()
  print(s)

with open("a.txt","w") as f:
  s = f.write("bbbbb")
  print(s)

with open("a.txt","a") as f:
  s = f.write("bbbbb")
 #s = f.write("/nbbbbb")
  print(s)

with open("b.txt","x") as f:
  s = f.write("ddddd")

import pandas as pd
df = pd.read_table("/content/a.txt")
df

学習

それでは学習を始めていきます。

テキストデータの読込について。

参照コード①②

①のコード

  • 事前準備。

"a.txt"というファイルを作成して適当な文字を記入し保存して下さい。
そしてそのテキストファイルを今回扱うpy/ipynbファイルと同ディレクトリに格納してください。
(a.txtを呼び出せる環境を構築する準備です。)

  • 実装

前述でも触れた通り、私たちがテキストファイルを確認する時、対象をダブルクリックするだけですよね。そのようなmindを一旦捨てて頂ければと思います。
同じ動作をする為にpythonはこのようなコードを用いますので。

file = open("a.txt")   #①
text = file.read()     #②
print(text)            #③
file.close             #④

これは何を意味しているでしょうか?説明致します。

  1. でa.txtを開いています。この状態ではまだファイルを開いただけなので内容を読み込んでおりません。
  2. ②でa.txtの内容を読み込んでtextという変数に格納しています。この状態でやっとデータが変数に格納されました。
  3. ③でそのデータが格納された変数を出力しています。
  4. ④で開いたファイルを閉じます。word.excel終了時にバツボタンで閉じますよね。このイメージで。

いかがでしょうか?伝わりましたかね?多分以前の私ならばこの説明でもピンとこなかったと思います。なので昨夜学習し思いついた例を出して再度説明致します。

file = open("a.txt")     #本を開く。
text = file.read()       #本の内容を読む。
print(text)              #本の内容をoutputする。
file.close               #本を閉じる。

私はこの例でしっくりと来ました。いかがでしょうか。

②のコード

ここまでの感想はいかがでしょうか?
「めんどくさい。」「たかがテキストファイルを確認するだけでこんな…使えんな。」
こう思うのが普通だと思います。でも大丈夫、もっと簡単な方法があります。
それはopen関数です。

with open("a.txt","r") as f:   #①
  s = f.read()                 #②
  print(s)                     #③

これでも同じテキスト読込に意味します。

それでは早速解説致します。

  1. opne関数でa.txtを開きます。第一引数:"テキストファイル名"第二引数:モード
  2. その開いたテキストファイルの内容を読み込んで変数に格納します。
  3. そのデータが格納された変数を出力しています。

これがopen関数の使い方です。

  • closeの必要がなく自動でcloseしてくれます。
  • 第二引数のrとは?

openの引数として「ファイルを開いて何をするのか」を指定する必要があります。
今回はデータを読み込むので第二引数として"r"(read)を使いました。

他のopen関数の使用例。

参照コード③④⑤⑥

さて、先ほどopen関数を紹介させて頂きましたが、他にも有用な第二引数が多々存在します。今回はその一部を紹介させて頂きます。

③のコード

第二引数をwとすることで、ファイルの内容を上書きする事が出来ます。

書き足しではなく上書きです。

with open("a.txt","w") as f:
  s = f.write("bbbbb")
  1. opne関数でa.txtを開きます。第一引数:"テキストファイル名"第二引数:モード
  2. その開いたテキストファイルの内容を上書きします。今回は"bbbbbb"と上書きします。

これで先ほどのデータ読み込み方法にて内容を確認してみて下さい。
内容が上書きされている事が確認できます。

2022-08-01_14h50_17.png

④のコード

第二引数をaとすることで、ファイルの内容に書き足しを行う事が出来ます。

with open("a.txt","a") as f:
  s = f.write("ccccc")
  1. opne関数でa.txtを開きます。第一引数:"テキストファイル名"第二引数:モード
  2. その開いたテキストファイルに内容を書き足します。今回は"ccccc"を書き足します。

結果を確認してみましょう。

2022-08-01_14h55_02.png

このようにすれば改行した状態で書き足す事も可能です。(windows)

2022-08-01_14h56_53.png

⑤のコード

多少応用も含まれておりますが是非。

with open("b.txt","x") as f:
  s = f.write("ddddd")

このコードは[b]というテキストファイルを作成して"ddddd"と書き込むというコードです。

  • [b]というテキストファイルの生成
  • "ddddd"という文字の書き込み

を行っているという事です。このようにopen関数には
新たにテキストファイルを生成するという側面も含まれています。

既存のファイルを名前指定して開く
新たなテキストファイルに名前を付けて開く
という2つの側面を持っている事を確認してください。

それではここで、第二引数xについて解説させて下さい。

  • これは新たにテキストファイルを生成して文字を書き込む際、
    既存のテキストファイルに書き込まれる場合はエラーになる。という処理です。

つまり既に存在している同じ名前の大事なファイルを間違って消してしまうような事態を避けることが出来ます
具体れを申し上げますと、この場合はエラーになります。

#エラー発生
with open("a.txt","x") as f:
  s = f.write("ddddd")

既にあるa.txtというファイルを新たに生成して書き込む事はできませんと。
もしこの引数がxではなく、wの場合は既存のa.txtの
内容が上書きされてしまう。という事です。

上書き事故を防ぎたいような慎重に扱いたい場合は有用です。

⑥のコード

pandasで開きます。

import pandas as pd
df = pd.read_table("/content/a.txt")
df

あまりpandasでテキストファイルを扱う事はないでしょうが、
excel,csvのノリでテキストファイルも読み込めてしまいます。参考までに。

終わりに

いかがでしょうか。後半はoprn関数ばかりでしたね。
このようにデータを開く際のコードは多岐にわたります。なので自分の使うスタイルだけ覚えようと考えるかもしれません。分かります。しかしそうもいかないですよね。様々な人のコードに触れる機会は多いですから。ネットで検索したりコードレビューしたり、その際面喰わないように見かけたらイメージが湧いてスムーズに調べられるぐらいのストックは持っていて良いかも知れません。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1