2016-04-11 2 views
3

私はPythonをコーディングするときの騒ぎで、グーグルリングの量は私を助けてくれない何かにぶつかってきました。 私は簡単なディレクトリリストツールを書こうとしていますが、OSXのディレクトリ名でSpacesを扱うことはできません。次のように 私のコードは次のとおりです。ディレクトリパスの中のスペースpython

def listdir_nohidden(path): 
    import os 
    for f in os.listdir(path): 
     if not f.startswith('.'): 
      yield f 

def MACListDirNoExt(): 
import os 
MACu = PCu = os.environ['USER'] 
MACDIR = '/Users/'+MACu+'/Desktop//' 
while True: 
    PATH = raw_input("What is the PATH you would like to list?") 
    if os.path.exists(PATH): 
     break 
    else: 
     print "That PATH cannot be found or does not exist." 
NAME = raw_input ("What would you like to name your file?") 
DIR = listdir_nohidden(PATH) 
DIR = [os.path.splitext(x)[0] for x in DIR] 
f = open(''+MACDIR+NAME+'.txt', "w") 
for file in DIR: 
    f.write(str(file) + "\n") 
f.close() 
print "The file %s.txt has been written to your Desktop" % (NAME) 
raw_input ("Press Enter to exit") 

トラブルシューティングを容易にするため、私は、これは本質的に煮詰めことができると思いますけれども:スペース/ボリューム/ディスクが含まれているディレクトリパスを供給する場合

import os 
PATH = raw_input("What is the PATH you would like to list") 
os.listdir(PATH) 

/『この\\は\\である\\フォルダ///ボリューム/ディスク』

:これは、「そのようなファイルやディレクトリ

を返していないフォルダです

エスケープをエスケープしているようです...?

+0

表示されているコードでは、表示されたエラーメッセージが表示されません。あなたが実際に走っているコード、*未編集*、あなたが与えた正確な入力、未編集*、そしてあなたが実際に手に入れたエラーメッセージを表示してください。 – zwol

+0

また、2番目のコードフラグメント( "ボイルダウン"のもの)は、名前にスペースを含むディレクトリで正しく動作し、最初のコードフラグメントが誤ってインデントされているため、テストできません(タブを使用しないでください)。 – zwol

+0

(プロンプトでバックスラッシュを入力しているかもしれませんか?シェルはそれを望んでいますが、このプログラムはありません) – zwol

答えて

0

'\\'の発生時にraw_input()から返された値を確認し、それらを ''に置き換えます。

a = a.replace('\\', '') 
0

私はこのに走った、と私は私が急いでやっていたことは、あなたがしようとしていたものもあると推測しています。ある意味では、@ zwolと@ trans1st0rの両方が正しいです。

あなたの煮詰めたプログラムに問題はありません。私はあなたが入力/Volumes/Disk/this is a folderを入れれば、すべてうまくいくと信じています。

しかし、あなたがやっていること(または少なくとも私がやっていること)は、Finderからターミナルにフォルダをドラッグすることです。ターミナルにドラッグすると、OSは自動的にスペースをエスケープするので、ターミナルに入力されるのは/Volumes/Disk/this\ is\ a\ folderです。

したがって、「入力する」には円記号が含まれていないことを確認するか、ドラッグ機能をサポートする方法として@ trans1st0rの提案を使用することができます。後者は、あなたの希望するパスに実際にバックスラッシュが含まれていることを確認してください。