質問: np.append(test_label,1) ``` とコードを書きました。 files変数の中のフォルダ(soundsフォルダ)の中にはdog~で始まるwavファイルだけが入っています。その中でdog~で始まるwavファイルのラベルを0と、その他で始まるwavファイルのラベルを1にしたいのですが、今全てのdog~で始まるwavファイルのラベルに1が入っています。本来全部に0が入るはずなのになぜこうなっているのかわかりません。http://ja.pymotw.com/2/glob/ やhttp://quzee.hatenablog.com/entry/2015/08/15/151210 の記事を参考にしてコードを書きました。なぜ期待通りにコードが動かないのでしょうか?どう直せば良いのでしょうか?
回答: ...あのですね、モジュールには適切な使い方があるってご存知ですか? ご提示のスクリプト内で二回glob.globを呼んでいますが、 ``` files = glob.glob(os.path.join(basedir, '*.wav')) ... if glob.glob('dog*') == True: ``` filesに格納されているのは真偽値ですか?違いますよね? きじねこ - [迷信] コンパイラはプログラマの心を察してくれる > > 当たり前のことですが、コンパイラは単なるソフトウェアに過ぎません。できることはといえば、プログラム言語の仕様にしたがって、ソースコードを機械的に翻訳することだけです。そうしたコンパイラには、曖昧で複数の意味にとれるコードを見ただけで、それを書いたプログラマの人となりを考慮して判断することなどはできません。言葉足らずのコードを見ただけで、それを書いたプログラマが今抱えている問題を察して処理を補完してくれることもありません。 > > > **状況に応じて都合よく動作が変わることなんて期待してはいけません。** 単に文字列がdogから始まるかを知りたいなら、正規表現を使うまでもないです。 先頭三文字をスライスで切り出して'dog'と比較すればよいです。 **追記:ファイル名をフルパスから取得するには、os.path.basenameを使えばよい。** 正規表現を用いるにしても、使うべきモジュールはglobではなくreです。 globはあくまでもファイル名を取得するためのもので、その際正規表現を利用できるだけです。