Pythonゼミ 第4回 テキストファイルの書き込み


Last updated: 2021/07/15

今までのプログラムの実行結果はターミナルにprintされただけです。実行結果を今後更に処理するために、パソコンに保存する必要があります。基本的にテキストファイルで保存するのが便利です。

*データ量が膨大の場合は、バイナリファイルで保存したほうがいいですが(今後紹介しますが、FALMAの波形データはバイナリファイルです)、皆さんの研究にはたぶん必要ないので、ここで紹介しません。


fid = open('F:/Course/python/04/test1.txt', 'wt') #‘wt’というのはwrite text
fid.write('This is the first line.\n')
fid.close() #処理が終わったら必ずclose


x = 100
fid = open('F:/Course/python/04/test2.txt', 'wt')
fid.write('Give me %3d yen.\n' % x)
fid.close()


x = 100
y = 3.4
fid = open('F:/Course/python/04/test3.txt', 'wt')
fid.write('%3d %3.1f\n' % (x, y))
fid.write('%4d %4.1f\n' % (x, y))
fid.write('%5d is larger than %5.2f\n' % (x, y))
fid.close()


fid = open('F:/Course/python/04/test4.txt', 'wt')
fid.write('This is the first line.\n')
fid.close()
fid = open('F:/Course/python/04/test4.txt', 'at') #‘at’というのはappend text
fid.write('This is the second line.\n')
fid.close()


m = range(20)
fid = open('F:/Course/python/04/test5.txt', 'wt')
fid.write('num, square root\n')
for val in m:
    fid.write('%3d,%4.1f\n' % (val, val**0.5))
fid.write('END\n')
fid.close()



補足


x = list(range(10))
y = x
y[1] += 1
print(x)
print(y) #yが変わったらxも変わる
y = x[:]
y[1] += 1
print(x) #yが変わってもxは変わらない
print(y)
>>
[0, 2, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 3, 2, 3, 4, 5, 6, 7, 8, 9]

import numpy as np
x = np.array([2, 4, 1])
y = np.array([9, 1, 4])
print(x-y)
>>
[-7  3 -3]


問題


(できたファイルの最初の一部をスクリーンショットで提出してください)

問題1,2はファイルpython02-2.txtを使います。問題3はファイルpython04.txtを使います

python04.txtをダウンロード:https://tingwu.info/pylab/data/python04.txt


1.ファイルpython02-2.txtの各行の最大値、最小値、平均値を計算して、新しいファイルに書き込んで、下図のようなファイルを作ってください。



2.ファイルpython02-2.txtのN(N>=2)行目の各数字からN-1行目の各数字を引いて、結果を新しいファイルに書き込んで、下図のようなファイルを作ってください(各行最後のコンマはあってもなくてもいいです)。


*数字と数字の間にコンマで区切れば、ファイルの拡張子”txt”を”csv”に変更したら、ファイルをExcelで開く・操作することができる。

*プログラミングが出きるなら、Excelは基本的に使わないです(プログラミングの方は効率がずっと高いです)


3.「説明」ファイルpython04.txtは実際の観測のログファイルです。linuxで作られたので、メモ帳で開いたら改行がなくなってめちゃくちゃになります。
*基本的にプログラミングに関連するテキストファイルを開くにはメモ帳はお勧めしません。私がよく使うのはConText Editorという無料ソフトです(http://www.contexteditor.org/index.php)。このソフトで非常に大きなファイルを開くのもとても速いです。一番いいところは下図のようにポインターの位置は何行目何列目はすぐ分かります。(一行の文字列の長さや一部の文字列は何番目から何番目までなど確認するときはとても便利です)

*Macの場合はAtomというエディターがいいかもしれません。

この問題で処理するのは”TRIG”を含む行だけです。これらの行の最初の10桁の数字は時間を示します。最後の3桁(時々4桁)の数字はトリガーレベル(電圧の大きさのようなもの)です。これらの行を抽出して、以下のようにトリガーレベルを11段階に分類して、最後下図のように必要な情報をファイルに書き込んでください。

トリガーレベル
<100 → level 1
[100, 200) → level 2
[200, 300) → level 3
[300, 400) → level 4
[400, 500) → level 5


[900, 1000) → level 10
>=1000 → level 11