蛇使いな彼女BLOG
【第27回】 小技編-Pythonで使うちょっとしたテクニック #2.
2021.01.22
さて、前回の続きです。
if d.size==0:
⦁if d.size==0:
d=np.random.randn(10,5) #標準正規分布に従う乱数
newpath=os.path.join(os.path.dirname(f),'sample%03d.csv'%i)
このセクションは、if d.size==0: のif文で条件分岐させています。
もし開いたデータのサイズ(文字数)が0であれば、で、10行5列の新たな値に書き換え、元のパスからos.path.dirname()によってディレクトリ名を取得しています。
(パスは大まかに「ディレクトリ+ファイル(拡張子)」で構成されていると思ってOKです。)
そして取得したディレクトリと任意のファル名をos.path.join(os.path.dirname(f)=ディレクトリ, 'sample%03d.csv'%i=ファイル名)で結合します。
[文字列置換の方法]
ここで少々詳しく解説しますが、私はじめて'%d'%を見たときになんだコレ?と思いました。
でもこれ結構便利な書き方で、演算子フォーマット(文字列置換)の一つです。
'sample%03d.csv'%iの‘% .. d・・・'% の意味は「符号つき 10 進整数」なので、
i が0,1,2…と変化すれば結果は、
'sample000.csv' 'sample001.csv' 'sample002.csv'…と3桁の連番になるんですよね!
これを知っていれば自動でファイルを作成したり書き込んだりするときは便利です!
また、文字列置換にはもう一つformat関数を使う方法もあって、
例えば x = 500
print( ‘{}と{}’.format(‘abc’,x) )
これを実行した結果は
abcと500 となります。
.format()直前の文字列に置かれた{}に変数内の値を文字列として置き換えてくれます。
format関数はあとから追加された機能らしく、古いバージョンでは実行できない可能性があるみたいですよ!(Python3以降なら心配なし)
np.savetxt()
⦁np.savetxt(newpath, d, delimiter=' ',header='',comments='',fmt=
["%.3f","%.2f","%.2f","%.1f","%.1f"] )
np.savetxt()は、ここでは書き換えたデータdを名前を付けて保存しています。
各パラメーターについて
⦁delimiterは区切り文字を指定することができます。
⦁headerはデータの先頭1行目に指定した文字列が入ります。
⦁commentsは、headerで指定した文字列の先頭に挿入されます。
⦁fmtは、データを書き込む際の有効桁数を指定することが可能です。
上の例ではfloatの小数点以下第3、2,1位を指定しています。
★結果★
これらの処理を実行すると、
sampleフォルダにはこのように新しいファイルが生成されています。
試しにsample000.csvを開くと、fmtで指定した桁数に揃っているのが分かります。
今回はプログラムの細かい部分に注目して説明をしました。
%の文字列変換はPythonに限らずCでも使われるようなので、他の言語にも共通する一般的な記述方法ですね(^u^)!
最近までモトハシは全く知りませんでしたが…。
以上、参考になれば嬉しいです!
では今回はこれにてさらば!