2012-02-23 14 views
0

私はこの問題を一日中解決しようとしています。私はちょうどユーザが指定するディレクトリの中のファイルをリストしたいと思う。以下は私のコードとトレースバックです:Python:ディレクトリー名としてユーザー入力を使用してディレクトリーをリストします。

>>> os.listdir(r'{}'.format(input('directory:'))) 

directory:C: 

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
WindowsError: [Error 123] The filename, directory name, or volume label syntax i 
s incorrect: 'C:\r\\*.*' 

任意の助けをいただければ幸いです、ありがとうございました!

答えて

3

C:を文字列形式で指定する必要があります。

>>> os.listdir(r'{0}'.format(input('directory:'))) 
directory:"C:\Users" 
['All Users', 'Default', 'Default User', 'desktop.ini', 'Public', 'RanRag'] 
>>> 

またはraw_inputを使用してみてください私のために正常に動作し、その。

>>> os.listdir(r'{0}'.format(raw_input('directory:'))) 
directory:C:\Users 
['All Users', 'Default', 'Default User', 'desktop.ini', 'Public', 'RanRag'] 

raw_input関数は、入力から行を読み込む(改行ストリッピング)ストリング に変換し、そして

あなたがraw_inputよりpython3により置換されている使用している場合に返しますinput

>>> os.listdir(r'{0}'.format(input('directory:'))) 
directory:C:\Users 
['All Users', 'Default', 'Default User', 'desktop.ini', 'Public', 'RanRag'] 
>>> 
+0

ありがとうございました!どうやら問題はPython 2.3のバグで、次のコードを使って解決しました: 'code'os.listdir( '{}')形式(input( 'name:')。rstrip( '\ r'))) – Jonathan

+0

I単にそれを調べていて、スタックトレースに "C:\ r \\ *。* '" '\ r"という文字が追加されていると言っていました。 – RanRag

2

私はエラーがinput代わりのraw_inputを使用することにあることを推測します。

inputを使用すると、pythonはユーザーが入力したテキストを解析しようとします。あなたの場合は、ユーザーが入力した文字列を持つだけなので、文字列に引用符を追加する必要があります(RanRagのように)。raw_inputを使用すると、ユーザーが文字列として入力した文字が返されます。

+1

RanRagはちょうど彼の答えを更新しましたが、私はまだまったく同じことを書いていました:D – Pit

0

としてRanRagが言った。しかしraw_inputから既に文字列を取得しているので、次のようにすることができます:

os.listdir(raw_input('directory: ')) 
関連する問題