- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PythonCGIで、WindowsのUPファイル名の抽出は?)
PythonCGIでWindowsのUPファイル名の抽出方法
このQ&Aのポイント
- 自宅サーバでPythonによるcgiの勉強をしている際に、Windowsのフルパス名からファイル名のみを抽出する方法について困っています。
- 現在のやり方では、Windowsのフルパス名を使用してファイル名を切り出すことができません。
- お知恵をお貸しいただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> tgfilename =fileitem.filename.split(‘\’).pop() ここ、シングルクォートの中が円マーク一つだけになってますがその通りですか? Pythonではダブルクォートもシングルクォートも変わらない(Perlとは異なる)ので これだとエラーになるはずですが。 またフルパス指定からファイル名部分だけを切り出すなら、 >>> import os >>> fn = r"C:\Documents and Settings\foo\デスクトップ\from-excel.CSV" >>> os.path.basename(fn) 'from-excel.CSV' と、osモジュールのメソッドを使えばたとえ区切りがスラッシュだろうがなんだろうが 対処してくれます。
お礼
sakusaker7さん、問題解決いたしました!ので、ご報告と、お礼申し上げます。 先の補足を投稿後、pythonをアップデート(2.4.1→2.4.3)してみたところ、■1点目:(2)についても、希望通りに動きました♪ 最終的には、以下のような形となっています。 import os myform = cgi.FieldStorage() fi = myform['file'] tgfn =os.path.basename(fi.filename).split('\\').pop() print myhtml % tgfn ※os.path.basename()は、やはり私の環境では、ファイル名のみ切り出してくれないのですが、「"\"をraw stringとして扱う」を期待して、追加しました。 今後ともよろしくお願いいたします。 ありがとうございました。
補足
sakusaker7さん、ご回答ありがとうございました。 2点のご提案を頂き、早速試してみました。 ■1点目:'\'→'\\'に変更 私の環境(python2.4.1)では、二つの状態が発生しました。 (1)先ずcgi内で、ファイル名の切り出しをしないようにして、ブラウザでアクセスし、フルパスのファイル名が表示されるのを確認します。その後、cgi側でファイル名を切り出して返すように変更して、ブラウザをリロードすると、見事ファイル名のみ切り出しできました! (2)上の状態で、新たにブラウザを開くと、「内部サーバエラー」が発生してしまいました。 ■2点目:os.path.basename(fn)を使用すると、私の環境では、フルパス名が帰ってきます。これは、cgiでも、インタプリタでも一緒でした。 それと、r"....."は、文字列をraw stringに変換する方法と思いますが、変数に入っている文字列を、raw stringに変換する関数?なり、メソッドはあるのでしょうか。 もう少し調べてみたいと思います。 ありがとうございました。