Pythonでローカルファイルを編集しよう!
スポンサーリンク

ローカルファイルを開く

Pythonでローカルファイルを見ていきたいと思います。例えば main.py と同じフォルダにある data.txt というファイルにアクセスするときは以下のように記述して中身を確認することが出来ます。

file = open(r"data.txt")
contents = file.read()
print(contents)
file.close()

# data.txtの中身が表示される

分かりやすいので上記のように記述していますが、本来は下記のように記述するのが望ましいです。理由はcloseにあります。理由については文末に書いておきます。

with open(r"data.txt") as file:
  contents = file.read()
print(contents)

# data.txtの中身が表示される

また、下の階層にアクセスしたい場合は以下のように記述をしてきます。

1つ上の階層にアクセスするには?

ではフォルダが上の階層にある場合どうすればいいでしょうか?その場合は下記の通り記述をします。

file = open(r"../data.txt")
contents = file.read()
print(contents)
file.close()

2つ上の階層にアクセスするには?

また、2つ上の階層へアクセスする場合は以下の通りです。

file = open(r"../../data.txt")
contents = file.read()
print(contents)
file.close()

絶対パスの記述について

絶対パスの記述はどうすればいいでしょうか?CフォルダやMacintosh HDからのファイルパスです。その場合は以下のように記述します。

file = open(r"/users/public/data.txt")
contents = file.read()
print(contents)
file.close()

読み取り・上書き・追記の方法を知ろう

# データを読み取る
file = open("data.txt", mode="r")
contents = file.read()
print(contents)
file.close()
# データを書き込む
file = open("data.txt", mode="w")
contents = file.write("上書きする内容")
# データを追加する
file = open("data.txt", mode="a")
contents = file.write("\n追加する内容")

なぜcloseを使用するか?

Pythonがファイルを開くと、コンピュータのリソースのいくつかの部分を占有します。

時間が経てばPythonが勝手に開いていたファイルを閉じて、リソースを解放することになるかもしれませんが、Python任せだとそれがいつ起こるか、また起こるかどうかはわかりません。

そこで、上の書き方でファイルを開いた場合はcloseを使ってコードを使って手動でファイルを閉じるように指示することにします。

closeを使わなくてもよい方法

毎回closeをコーディングするのは大変です。ただし、withを使用した記述であればcloseは不要です。なので、withを使って記述をしましょう。

with open("my_file.txt") as file:
    contents = file.read()
    print(contents)

ローカルファイルで手紙の宛名変更

PLACEHOLDER = "[name]"

with open("Input\\Names\\invited_names.txt") as names_file:
    names = names_file.readlines()

with open("Input\\Letters\\starting_letter.txt") as letter_file:
    letter = letter_file.read()
    for name in names:
        stripped_name = name.strip()
        new_letter = letter.replace(PLACEHOLDER, stripped_name)
        with open(f"Output\\ReadyToSend\\letter_for_{stripped_name}.txt", mode="w") as completed_letter:
            completed_letter.write(new_letter)

ぜひ参考にしてください!また!

Twitterでフォローしよう

おすすめの記事