【Python】ファイルの読み書きをしよう!【with open】

Python

みなさんこんにちは、現役エンジニアのサメハックです

未経験からWebエンジニアに転職し、
現在正社員として5年働いたのちフリーランスとして独立しました。

Pythonの解説シリーズです。

今回はファイルの読み込みと書き出しについて学んでいきましょう!

駆け出しエンジニアや未経験の方、
また新入社員を指導する先輩社員にとっても
わかりやすいように解説していきます!

この記事を読むと・・・
  • ファイルの読み込みが出来る
  • ファイルの書き出しが出来る
Pythonを使いこなそう!

ファイル操作

Pythonでファイルの読み書きをするには
with open 構文を使用します。

with open構文

with open(ファイルのパス, モード) as file:
    # 任意の処理

このように記述することでファイルの読み書きが出来ます。

withとは

本来ファイルの読み書きをする際には、以下のように
openとcloseがセットで必要なのですが
withを使用することでスコープ内の処理が完了した際に
自動的にファイルがcloseされます。

file = open("./sample.txt")
# 任意の処理
# 任意の処理
# 任意の処理
file.close()

asとは

as ~とは、別名というイメージで
読み込んだファイルをスコープ内ではfileという変数として扱う
といった意味合いになります。

操作モード

r 読み込み
w 上書き※ファイルがなければ作成
a 追加書き込み
x 書き込み※ファイルが既に存在している場合エラー
r+ 既存ファイルの読み書き
w+ 新規ファイルの読み書き
a+ 追記・読み書き
t テキストモード
b バイナリモード

ファイルを読み込もう!

with open(ファイルのパス, "r") as file:
    # 任意の処理

同一ディレクトリ内に、
・open.py
・sample.txt
を用意してください

こんにちは、サメハックです。
こんにちは、サメハックです。
Hi! サメハックです。
Hi! サメハックです。
Hi! サメハックです。
# 読み込みモードでsample.txtを読み込む
with open('./sample.txt', 'r') as file:
    # ファイル全体を文字列として読み込む
    print(file.read())

【出力結果】

~~~~~ % python3 open.py 
こんにちは、サメハックです。
こんにちは、サメハックです。
Hi! サメハックです。
Hi! サメハックです。
Hi! サメハックです。
これでファイルの読み込みができたよ

別のファイルに書き出そう!

with open(ファイルのパス, "w") as file:
    # 任意の処理

ここでは読み込んだファイルを別のファイルに書き出す
という処理を作成します。

ファイル構成は先程と同じにしています。

# 変換後の文字列を格納する
new_text = ""

# 読み込みモードでsample.txtを読み込む
with open('./sample.txt', 'r') as file:
    # サメハック → いぬハック
    # Hi → Hello
    # に変換して文字列を格納
    new_text = file.read().replace("サメハック", "いぬハック").replace("Hi", "Hello")

# 上書きモードでwrote.txtを開く※ファイルは新規作成される
with open("./wrote.txt", "w") as file:
    file.write(new_text)

# 読み込みモードでwrote.txtを読み込む
with open("./wrote.txt", "r") as file:
    print("↓↓↓↓wrote.txt↓↓↓↓")
    print(file.read())
~~~~~ % python3 open.py 
↓↓↓↓wrote.txt↓↓↓↓
こんにちは、いぬハックです。
こんにちは、いぬハックです。
Hello! いぬハックです。
Hello! いぬハックです。
Hello! いぬハックです。

このように、sample.txtを読み込み
それを文字列変換し、wrote.txtを新規作成できることが確認できました。

まとめ

  • ファイルの読み書きにはwith open構文を使う

満足いただけたら、1クリックなのでSNSフォローしてもらえると嬉しいです🦈

タイトルとURLをコピーしました