海外渡航の手続きや現地生活情報などなど。今はフィンランド在住。中国語サイトは嫁さんの日記。Dpythonでファイルを読み込む時にファイル名を取得する方法のまとめ久々のpython投稿。前にpythonでのテキストファイルの入出力について書いた。pythonでのテキストデータの入出力方法いろいろ上記の投稿はどちらかというと開いたファイルの中のテキストデータをどう処理するかということに焦点を絞って書いた。今回の投稿はちょっとそれとかぶってもしまうところもあるのだけど、最初にファイルを開くところ、ファイル名(もしくはファイルパス)を取得するということに焦点を絞って書いてみたい。最近私がもっぱらこれを使っているので最初はtkinterから。自分で使うのにはいちいち窓が立ち上がるし、クリックしなきゃいけないこともあるので鬱陶しさもある。他の人にプログラムを渡すときには、どうやってファイルを読み込むかをあまり説明しなくていいので楽。大量のファイルを一度に読み込みたい場合だと、窓でファイルを選択するときにshiftやcontrol/commandを使って大量選択が簡単にできるのも利点。いうわけで以下はtkinterを使ったファイルパス取得の例。bkgname)tk.destroy()大量のデータファイルを読み込むときはaskopenfilenamesを使って、一つのファイルの場合はaskopenfileを使う。initialdirで窓を開いた時の最初の位置を指定できるので、適当に./DATAみたいなフォルダを作っておいてデータをそこに入れておけば、command+Aで簡単に全部データが開けるかな。本当に大量のデータを読み込むって場合は、別の方法を使った方が楽かもしれないけど。tkinterのその他詳しい使い方については別投稿を参照していただきたい。pythonのtkinterを使ってユーザー入力を取得する方法argvsでファイル名取得C言語の時は一番お世話になっていたargvs。自分で2、3個のデータファイルを読み込もうとする時には一番楽な方法。Macのターミナルでtabでの名前補完と組み合わせれば、ファイルの読み込みがサクサクとできる。大量に読み込ませたいファイルがある場合は大変。5個くらいまでの読み込みに使う感じだろうか。'rb')pythonではsysをimportしておく必要がある。if文は読み込みたいインプットの数が正しい数であるかを確認。間違ってたら正しいインプットを要求して落とす。目に読み込んだ名前はargvs[1]になるので注意が必要。argvs[0]はpythonの.pyファイルになる。argvsは他にも単純に適当な文字列を追加するのにも使える。上の例を書いた時には、argvs[2]に出力ファイルネームを入れていた。してファイル名を取得したらopenやnp.loadtxtなどで開いてあげると良い。インプット用のファイルを作っておいてファイル名はプログラム内にプログラムに直接ファイル名を書き込んでしまっておく。何かしらパラメータの入力を受け付けるタイプのプログラムでは便利。input.txtなどのファイルを作っておいて、プログラムを走らせる前にその中のパラメータだけ書き換える感じ。プログラムの方を書き換えないで良いのが利点と言える。ファイル名はパスでも指定できるし、同じ階層にいるなら名前を書いておけば良い。open('input.txt')など。ファイルを出力するための名前を取得する方法ファイルを書き出すのに名前を設定しておきたい場合ってのも結構ある。数少ないなら上のargvsの例のようにユーザーに名前を決めてもらうのも良い。プログラム内に直に出力名を決めておいても良い。この場合プログラムを回すたびに上書きされるのでそれだけ注意が必要。ファイルをまとめて読み込んだ時に便利なのは、入力ファイル名に何かしら名前を足して出力ファイルの名前に変えてしまう方法。以下はargus[1]で入力ファイル名を取得して、入力ファイルにsubtという文字を足して出力するという例で。Subtってのは何かしらデータファイル。Subt)これを例えばtkinterで大量に読み込んだファイル名に対して同じことをしてあげれば、入力ファイル名に次々と自動的にファイル名が割り振られていくことになる。とここまで書いて、思い出した。tkinterの場合だとパス取得になってるから、このままだとおかしなことになるんだ。os.path.basename(filenames[i]+str(i)+'.txt')こんな感じにos.path.basenameを使ってファイル名に変換してあげる必要がある。今の所思い浮かんだ名前の取得方法はこれくらい。何か他のものを使う機会があれば後ほど追記していくことにする。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。Analyticsを使用しております。使用して、ユーザーが当ウェブサイトや他ウェブサイトに過去にアクセスした際の情報に基づいて広告の配信を行います。ユーザーは、広告設定にてパーソナライズ広告を無効にできます。Analyticsの使用にあたっては、当ウェブサイトのアクセス解析のためCookieを利用しております。データ収集・処理の仕組みについてはwww.google.com/intl/ja/policies/privacy/partners/などをご覧ください。