0から始めるPython基礎講座

#初心者# Pythonを使用したファイル操作のまとめ!

りっくん

こんにちは、りっくんです。

今回はよく使用されるであろう、ファイル操作(読み込み・書き込み)について
基礎構文をおさらいしつつ解説していきます。

このファイル操作ができるようになるとグッとプログラミングができるようになります!
便利な構文もあるので、しっかり理解していきましょう。

プログラミングスクール、高いなあって思いませんか?

今や多くのプログラミングスクールがあり、様々なことが学べますが

そのどれもが10〜20万は平気でかかってしまい、まとまったお金がないと

なかなか入会まで踏み切れないですよね?

侍エンジニアさんではそのような悩みを解決できる「サブスクプラン」が
あり、月額2,980円という破格の値段で包括的なサポートを受けられるプランを展開しています!

他の初心者プログラマーと差をつけるためにも、ぜひ参加してみましょう!

そもそもファイル操作とは?

「ファイル操作」といっても、具体的にどういった操作をプログラミング上で実現できるのか、そこが理解していないと定着していかないと思います。

Pythonで実現できるファイル操作は主に以下が挙げられます。

  1. ファイルの読み込み操作
  2. ファイルの書き込み操作(新規作成・上書き・追記)
  3. ファイルの存在確認
  4. ファイルの削除
  5. 空ではないディレクトリ(フォルダ)の削除

メモ帳を開いてファイル名を指定して保存することも、ファイルの中に文字を入れて保存することも色々できてしまうわけです。

ファイル操作① –読み込み操作

読み込み操作ではPythonの標準関数である「open関数」を使用します。
(pip installを使用する必要がないので注意です!)

open()関数

open(file名, mode=’r’, buffering, encoding, errors, newline, closefd, opener)

※赤字はオプション設定が必須のもの

コード実装例として以下の通りとなります。

f = open('test.txt' ,'r')

for row in f:
    print(row)

f.close()


上記の例として、
ファイル名を「text.txt」モードを「r(読み込みモード)」に指定しています。

open()関数の説明欄に記載していますが

ファイル名とモードは指定しなければエラーが返ってきますので注意です。

ファイルを開いて操作する際は変数を用意し、代入していく必要があります。

コード例の3~4行目ではfor文を使用し、開いたファイルの中身を1行づつ読み込み
コンソール上で出力していきます。

一通り処理が終了したら最後の行に「f.close()」と記載し、開いたファイルを閉じます。
なぜclose()する必要があるのかについては、最後の見出しをご覧ください。

ファイル操作② –書き込み操作(新規作成・上書き・追記処理)

書き込み操作もopen()関数を使用します。
しかし、関数内で指定するオプションの内容が読み込み操作とは異なるので注意です!

open()関数

open(file名, mode=’w’もしくは’a’もしくは’x’, buffering, encoding, errors, newline, closefd, opener)

※赤字はオプション設定が必須のもの

新規作成(指定したファイルが存在すれば上書き処理)

指定モード:‘w’

fileオプションで指定したファイルが存在している場合は
既存の内容を削除し、上書き処理をします。

コード例

f = open('test.txt','w')

f.write('Hello')
f.write('Goodbye')

f.close()


3〜4行目ではwrite()メソッドを使用して、testファイルに書き込みを行っています。
1行の文字列を単純に書き込みを行う際はwrite()メソッドを使用します。

デフォルト上ではwrite()メソッドは改行されないため、明示的に改行文字「\n」
入れる必要があります。

ただ、テキストに入力するデータが単純な文字列ではなく、リスト型の場合は
write()メソッドを指定すると構文エラーが発生します。

⇨この問題を解決する方法については、下記に記載しているため参照してみてください。

新規作成(指定したファイルが存在すればエラー)

指定モード:‘x’

fileオプションで指定したファイルが存在しなければ、新規作成して書き込みを行います。

コード例

f = open('test.txt','x')

f.write('Hello')
f.write('Goodbye')

f.close()

fileオプションで指定したファイルが存在した場合、エラーを返し書き込みを行いません。

追記作成

指定モード:a’

fileオプションで指定したファイルが存在しなければ、新規作成して書き込みを行います。

コード例

f = open('test.txt','a')

f.write('Hello')
f.write('Goodbye')

f.close()

ファイル操作③ –ファイルの存在確認

Pythonの標準ライブラリである「os.pathモジュール」を使用します。
(こちらもpip installを使用する必要がないです)

コード例

import os.path

# 否定の場合:if not os.path.exists('test.txt')
if os.path.exists('test.txt'):
    print('存在する')
else:
    print('存在しない')


まず1行目でファイルパス操作を行うos.pathモジュールをimportします。

3行目からファイルパスを操作して、実際にファイルが存在しているか確認するために
if文とos.pathモジュールのexists()関数を呼び出します。

os.path.exists()関数

os.path.exists(ファイルパス)

ファイル操作④ –ファイルの削除

ファイル削除する際、osモジュールを使用します。
※os.pathモジュールとは異なりますので注意です。

コード例

import os

os.remove('test.txt')


こちらはシンプルで、osモジュールのremove関数を使用してファイル名を指定すれば削除することが可能です。

os.remove()関数

os.remove(ファイル名)

ファイル操作⑤ –空ではないディレクトリ(フォルダ)の削除

os系のモジュールだと空ではないディレクトリ(フォルダ)を削除することができないのでshutilモジュールをインポートして関数を実行する必要があります。

コード例

import shutil

shutil.rmtree('test')

shutil関数

shutil.rmtree(‘ディレクトリ(フォルダ)名’)

ファイル書き込み操作 –リストを用いた書き込み操作について

リスト型の場合はwrite()メソッドを指定して実行すると構文エラーが発生してしまうのでwritelines()メソッドを使用します。

コード例

file = open("test.txt", "w")
text = [
    "メロン",
    "イチゴ",
    "みかん",
    "スイカ",
    "ぶどう"
]
file.writelines(text)
file.close()

リストの内容がファイル内に書き込まれました。
write()メソッド同様、改行文字を指定しない場合は1行に出力されてしまうため
注意が必要です。

ファイル操作 –close()を使用する理由

さて、ここまで様々なファイル操作について解説していきましたが
いずれも処理が終了したら最後の1行に「close()」を使用しております。

このclose()メソッド
実は使用しなくても処理エラーになることがなく終了してしまうのですが、下記の理由で必ず記述してあげる必要があります。

ファイル操作にclose()を指定する理由
  • メモリの使用量が問題でPC処理パフォーマンスが低下する。(PCの処理が重くなる)
  • ファイルを閉じないことで、今まで書き込んだデータが失われる可能性がある。
  • 書き込み内容が反映されない可能性がある。

上記の理由で必ずopen()したファイルをclose()してあげる必要があるわけです。

でも最初の頃はどうしても記述漏れが発生することもありますし
わざわざ書くのも億劫ですよね?

そんな時のために便利な関数が「with open()」というものになります。

ファイル操作別法 –with open()

この関数を使用すると、close()指定する必要がなくなります。

コード例

with open("sample1.txt", "r") as f1:
    with open("sample2.txt", "w") as f2:
        f2.write(f1.read())


今回のコード例は

「sample1.txt」を読み取りモードで開く。

「sample2.txt」を書き取りモードで開き、1つ前で開いたsample1.txtの内容を
sample2.txtに書きとる

といった処理を記載しています。

こちらの方がclose()を指定することがないため、トラブルが起きることも減りそうですね!

まとめ

今回紹介したモジュール「os」「os.path」は他にも様々な関数が用意されているため
気になる方はぜひ調べてみてください!

プログラミング学習はスクール通いもおすすめです!

皆さんは今、独学でプログラミングを学んでいらっしゃるかと思います。

でも考えてみてください、学習しているといっても「業務に還元できる」内容でないと案件も獲得できないですよね?

そこでおすすめなのかこちら「Winスクール」さんです。

こちらでは受講生一人ひとりのスキルや理解度に応じた指導を行い、業務に即した実践的な学習を個人レッスンで受けられるんです!
しかもただレクチャーするだけでなく、資格取得にも強いみたいなので
興味のある方はぜひ無料体験・カウンセリングに足を運んでみましょう!!