Python 指定ファイルの存在をチェックし、無ければファイルを作成する。有れば追記する。

'20/02/29/更新:コードの可読性を若干良くしました。
os.path.isfile()を使用すれば楽である。指定ファイルが存在すれば真「True」、存在しなければ偽「False」を返す。その結果を、if文で、if True: や if not True: で分岐すれば良い。ちなみに、ファイルでなくてフォルダの存在有無を確認したい場合はos.path.isdir()を使う。

 ▼本プログラム
カレントディレクトリに指定ファイル「abc.csv」が存在しない場合は、そのファイルを作成する。逆に、そのファイルが存在する場合は文章を追記する仕様です。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os import datetime now = datetime.datetime.now() now = now.strftime("%y%m%d") def writeTxt(file_name, myCheck): if not myCheck: # notを付与することで、Falseの場合に実行(真(True)でない) with open(file_name, "w") as f: # ファイルを作成 f.write(file_name + " not found" + '\n') # 最後の \n は改行コード f.write(file_name + " created" + '\n') else: # Trueの場合 with open(file_name, "a") as f: ファイルに追記 buf = [str(file_name) + ' found', now, '\n'] buf = '\n'.join(buf) # リスト(配列)内の全要素へ改行コードを付与 f.write(buf) def main(): myCheck = os.path.isfile(file_path) # 検索ファイルがあればTrueを返し、なければFalseを返す(ブール型boolと呼ぶ)。 print(str(myCheck), type(myCheck)) writeTxt(file_name, myCheck) # witeTxt関数へ、変数を引数に渡して実行 if __name__ == '__main__': ### parameter ### current_path = os.getcwd() # パス設定(カレントディレクトリ) file_name = 'abc.csv' # 検索ファイル名を設定 file_path = os.path.join(current_path, file_name) # パスとファイル名を結合 print(file_path) ### call function ### main()

■本プログラムの実行例を以降に示す

1. 上記コードを「check_file.py」などとファイル名で保存する(下図)

f:id:HK29:20190502183645p:plain

2. そして、python check_file.py としてプログラムを実行すると「False」が表示される(下図)。これは「abc.csv」ファイルがなかったためである。そして、「abc.csv」ファイルが作成される。

f:id:HK29:20190502184030p:plain

 3. 更に、同様にプログラムを実行すると「True」が表示される(下図)。これはすでに「abc.csv」ファイルが存在しているためである。そして、ファイルの中身を見ると、文章が追記されていることがわかる(4行目以降)

f:id:HK29:20190502185224p:plain

以上

<広告>