表題の件を成すには最終行を取得する必要があり、その方法は下記2点です。
lastrow = sum(1 for i in open([ファイル名])) # ファイル内の最終行の番号を取得
lastrow_sen = linecache.getline([ファイル名], [指定行]) # ファイル内の指定行を取得
本プログラムの動作仕様を以降に示します。
はじめに、対象ファイル内の最終行に指定文字列「END」がある場合の例を下図に示す。
本プログラム実行の結果を下図に示す。最終行番号「9」と最終行文字列「222Eh Eh EeENDee」をprint出力し、その下にcheck OKなどと出力している。
次に、対象ファイルの最終行に指定文字列「END」がない場合の例を下図に示す。
本プログラムの実行結果を下図に示す。最終行番号「3」と最終行文字「#####」をprint出力し、その下にcheck NGなんちゃらと出力している。
そして、対象ファイル内を見ると、最終行に「END」が追記されているのがわかる(下図)。
▼本プログラム
import os,
linecache, shutil, csv
def txtCheck(fname, check):
if os.path.isfile(fname):
lastrow = sum(1 for i in open(fname))
lastrow_sen = linecache.getline(fname, lastrow)
if lastrow_sen.find( check ) == -1:
print("check NG -> copy file and edit")
shutil.copy2(fname, fname + '.backup')
with open(fname, 'a', newline='') as f:
writer = csv.writer(f, lineterminator='\n')
f.write(check + '\n')
else:
print("check OK")
else:
print("file not found")
if __name__ == '__main__':
fname = './abc.csv'
check = 'END'
txtCheck(fname, check)
print("finished")
以上
<広告>
リンク