GUIを自動で操作するフリーツール:SikuliX ですが、Pythonの構文を使用して、ソースコード上でファイルパス、ファイル、フォルダの操作を行うことができます。
本記事では、パスのコンテンツの「読み込み」「書き込み」の操作で使用できる構文について、まとめます。
ファイルの開閉
ファイルの読み書きの操作の例をまとめます。読み書きのためには、特別なモジュールをインポートする必要はありません。しかし、ファイルの「開」「閉」をしないといけません。
コードサンプル:
f = open(‘ファイル名’, ‘モード’)
~*~本文~*~
f.close()
ここで言う「モード」とは、「読み込み」もしくは「書き込み」を選択するものです。デフォルトは、「読み込み」のモードになっています。オプションとして、エンコーディングの種類も指定できるようです。
ファイルの読み込み
特定のファイルの内容を読み込むときに使用します。サンプル用のファイルは、以下の内容になっています。
filesample_line1
filesample_line2
filesample_line3
filesample_line4
filesample_line5
内容を文字列として読み込む
read()を使用します。このメソッドは文字列として読み込むため、数値を扱いたい場合は int型のような数値に変換する必要があります。
コードサンプル:
file = open(”samplefile.txt”, “r”)
print(file.read())
file.close()
実行結果:
filesample_line1
filesample_line2
filesample_line3
filesample_line4
filesample_line5
内容をリストとして読み込む
readlines()を使用します。改行を含む場合は、改行コードとして「\n」を含みます。
コードサンプル:
file = open(”samplefile.txt”, “r”)
print(file.readlines())
file.close()
実行結果:
[‘filesample_line1\n’, ‘filesample_line2\n’, ‘filesample_line3\n’, ‘filesample_line4\n’, ‘filesample_line5’]
readlines()の他にも、list()を使用する方法もあります。実行結果は、上記と同様です。
コードサンプル:
file = open(”samplefile.txt”, “r”)
print(list(file))
file.close()
内容の1行分のみ読み込む
readline()を使用します。改行を含む場合は、改行コードとして「\n」を含みます。
コードサンプル:
file = open(”samplefile.txt”, “r”)
print(file.readline())
file.close()
実行結果:
filesample_line1
また、readline()を複数回記述すれば2行目以降も読み取ることが可能です。
コードサンプル:
file = open(”samplefile.txt”, “r”)
print(file.readline())
print(file.readline())
print(file.readline())
print(file.readline())
print(file.readline())file.close()
実行結果:
filesample_line1
filesample_line2
filesample_line3
filesample_line4
filesample_line5
内容をバイナリデータとして読み込む
Windows上でのPythonはテキストファイルとバイナリファイルを区別しています。ファイルをバイナリーデータとして読み込みたい場合は、モードを”rb”と設定してみてください。通常の”r”で読み込むと、テキストファイルとして認識されて行末文字が自動的に少し変更されるようです。読み込む対象がテキストファイルであれば影響ありませんが、画像ファイルやexeファイルであった場合は、ファイル破損の懸念があります。
ファイルの書き込み
書き込みの際は、以下のフォルダー構成を基準に記載していきます。
C(ドライブ)
|– dir(フォルダー)
|– sample.txt(ファイル)
新規作成(上書き)
write()を使用します。同名のファイルが存在しない場合は新規作成され、同名ファイルが存在する場合は上書きされます。追記ではないので、注意してください。
コードサンプル:
file = open(“C:/dir/sample.txt”,”w”)
sample_text = “sample\ntext”
file.write(sample_text)
file.close()
実行結果:
ディレクトリ「C:/dir」に、以下が記述されたsample.txtが作成される。
sample
text
数値の書き込み
write()メソッドでは、数値の書き込みができずにエラーになります。そのため、str()メソッドで文字列として扱うようにします。
コードサンプル:
num = 100
file = open(“C:/dir/sample.txt”, “w”)
file.write(str(num))
file.close()
実行結果:
ディレクトリ「C:/dir」に、以下が記述されたsample.txtが作成される。
100
リストの書き込み
writelines()を使用します。改行したい場合は、改行コード(\n)を入れないと1行に羅列されてしまうので、注意してください。
コードサンプル:
sample_list = [“line1”, “line2”, “\n”, “line3”]
file = open(“C:/dir/sample.txt”, “w”)
file.writelines(sample_list)
file.close()
実行結果:
ディレクトリ「C:/dir」に、以下が記述されたsample.txtが作成される。
line1line2
line3
追記の書き込み
write()で、モード「a」を使用します。こちらも、改行コード(\n)を入れないと最終行に羅列されてしまうので、注意してください。既存のテキストに改行して追加したい場合は、必ず改行コード(\n)を入れるようにしましょう。
コードサンプル:
sample_text = “\nafter input text”
file = open(“C:/dir/sample.txt”, “a”)
file.writelines(sample_text)
file.close()
実行結果:
ディレクトリ「C:/dir」に、以下が記述されたsample.txtが作成される。ただし、既存テキストとして、「original text」の文字列が1行目に記載されているものとします。
original text
after input text
文字列の置き換え
read()、reprace()、write()を組み合わせて記載します。既存のテキストとして、以下の文字列が記載されているとします。
original text 1
original text 2
original text 3
コードサンプル:
file = open(“C:/dir/sample.txt”, “r”)
base_text = file.read()
file.close()
replace_text = base_text.replace(“original”, “replace”)
replace_file = open(“C:/dir/sample.txt”, “w”)
replace_file.write(replace_text)
file.close()
実行結果:
ディレクトリ「C:/dir」に、「original」が「replace」に置き換えられたsample.txtが作成される。
replace text 1
replace text 2
replace text 3
まとめ
今回は、ログの書き出しなどにも利用できるファイルの読み書きについて、記載しました。
SikuliXはPythonの構文が使用できるので、その利点を存分に活用してみましょう。ぜひ色々な使い方を模索してみて下さい。
参考
↓↓パスの指定でエラーとなる場合はこちら↓↓
【SikuliX/Python】パスの指定をしてみよう