お世話になります。
現在、pythonにてあるディレクトリの一覧を表示させるプログラムをしているのですが、対象の中に日本語を含むディレクトリ・ファイルがあると
処理が行われません。
現在書いているコードです。↓
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# ファイルとサブディレクトリのパスを表示する
import os, os.path
path = "D:\Myfiles\あいうえお\ "
for root, dirs, files in os.walk(path):
for file in files:
print os.path.join(root)
環境はwindowsXP,python2.6です。
エンコード・デコードを行ったのですがうまくいきませんでした。
ちなみに、pathに日本語が含まれない場合には、一覧が取得できます。
お手数ですが、分かる方いらっしゃいましたら教えてくださいませ。
No.3ベストアンサー
- 回答日時:
上のコードを正しくインデントするとこうでしょうか?
import os, os.path
path = "D:\Myfiles\あいうえお\ "
for root, dirs, files in os.walk(path):
___ for file in files:
_______ print os.path.join(root)
こうすると、ディレクトリの中にあるファイルの数(!)だけ
そのディレクトリの名前(!)を表示するってコードになるんですが、
正しい動作なんでしょうか?
# -*- coding: utf-8 -*-
あと、こう書いてあるってことは
ソースコードはUTF-8で書いてますよね?
この場合、ディレクトリやファイルを指定するパスは
全てunicode文字列にする必要があります。
(もしくは明示的にShift_JISに変換する。)
よって以下のように書いてください。
path = u"D:\\Myfiles\\あいうえお"
\ のエスケープもお忘れなく。
ちなみに、os.walk関数の引数にunicodeを渡すと
戻り値もunicodeになります。
それから、os.path.join関数は
複数の文字列をパスとして結合する関数です。
上のコードからは何がしたいのかよく意味が汲み取れないのですが、
ファイルの一覧を絶対パス(!)で欲しいということであれば
以下のようにrootとfileを引数に指定します。
print os.path.join(root, file)
あと、fileはビルトイン型として存在するので
変数として使わないほうがいいです。
尚、osをimportすると、os.pathは自動的にimportされます。
以上をまとめると、正しいコードはこうでしょうか。
# ファイル(!)とサブディレクトリ(!)のパスを表示する
import os
path = u"D:\\Myfiles\\あいうえお"
for root, dirs, files in os.walk(path):
___ for f in files:
_______ print os.path.join(root, f)
___ for d in dirs:
_______ print os.path.join(root, d)
参考URL:http://docs.python.org/library/os.html#os.walk
ご回答ありがとうございました。
理想の形になりました!
色々試していた中でつまずいた結果、上記コードになりました。
なんかpythonが楽しくなってきました!
本当にありがとうございました。
No.2
- 回答日時:
次の方法で対応出来そうです。
print os.path.join(dirs)
print os.path.join(files)
→変更点
print str(os.path.join(dirs)).decode("Unicode-Escape")
print str(os.path.join(files)).decode("Unicode-Escape")
#全角コード変換は面倒ですね。
なるほど!
ただ、上記の結果を行うと
print str(os.path.join(dirs)).decode("Unicode-Escape")
[u'aaa', u'新しいフォルダ']
となります。「u」はしょうがないんでしょうか。。
さらにこれは私の環境のみ出力され、他のマシンではフォルダ名/ファイル名のみ表示されるという不可解さ。
pythonは日本語の扱いで苦戦しますね。
色々と勉強になりました。
ありがとうございました。
No.1
- 回答日時:
ちょっと手元の環境で確認しましたが次の修正を行うと改善されるかも
しれません。
【修正点】
path = "D:\Myfiles\あいうえお\ "
【お試し】
path = u"D:\\Myfiles\\あいうえお\\"
この回答への補足
ご回答ありがとうございました。
教えて頂いた方式で上手く言ったのですが、
上記コードの下に以下の内容を記述したところ
print os.path.join(dirs)
print os.path.join(files)
日本語ファイルの結果が、u'\ubna~
のような結果になりました。日本語化して表示したいのですが
デコード?などうまくいかず。。
もしご存じでしたら併せてご教授いただけないでしょうか?
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
マイクラでPythonのプログラミ...
-
フルパスから最後のディレクト...
-
windows.hがincludeされない
-
ファイルやディレクトリの存在...
-
fopenで別ディレクトリにファイ...
-
バックスラッシュって?
-
ドラッグ&ドロップについてです...
-
FTPでputすると空ファイルが出...
-
webアプリケーションでの画像フ...
-
C言語初心者の質問失礼します。
-
C言語での縦方向のファイル出力...
-
パラメータが正しくありません...
-
c言語 2つのファイルを行ご...
-
CSVファイルへの保存の際、デー...
-
xismoについてです!開こうとす...
-
1行ずつではなくまとめてファイ...
-
ファイル名の先頭にアンダース...
-
出力をExcelにすることは可能??
-
VBSで指定行に挿入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
どんなプログラムを書いても指...
-
ExcelVBAでカレントディレクト...
-
マイクラでPythonのプログラミ...
-
windows.hがincludeされない
-
「UNCパスはサポートされません...
-
ファイルやディレクトリの存在...
-
ネットワーク上のコンピュータ...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
GetPrivateProfileStringでini...
-
ExcelVBA サーバーの(共有フォ...
-
絶対パスの絶対て英語で何でし...
-
FTPでリモートのファイル一覧取得
-
webアプリケーションでの画像フ...
-
ファイルダイアログのカレント...
-
VBAで自身のファイル名を取得す...
-
AfxLoadLibrary関数で、DLLのハ...
-
Ubuntu テキストファイルをどこ...
おすすめ情報