2016-04-11 17 views
3

Python'u kodlamada bir noob'um ve hiçbir miktarda Googling'in bana yardımcı olmadığı bir şeyle karşılaştım. Basit bir Dizin listeleme aracı yazmaya çalışıyorum ve OSX'de dizin ismindeki Spaces ile uğraşmak istemiyorum. Kodum aşağıdaki gibidir:Dizin yolundaki pythondaki boşluklar

sorun bu temelde aşağı haşlanmış olabileceğini düşünüyorum gerçi çekim kolaylığı için
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") 

: boşluk/Cilt/Disk içeren bir dizin yolu tedarik ederken

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

/Bu o

döndüren bir klasördür "böyle bir dosya ya da dizin:

'/ Birimleri/Disk/Bu \\ a \\ klasör/\\ olduğunu'

Kaçışı kaçmak gibi görünüyor ...?

+0

Gösterilen kod, gösterilen hata iletisini oluşturamıyor. Lütfen çalıştığınız kodu, * düzenlenmemiş *, verdiğiniz tam girişi, * düzenlenmemiş * ve gerçekte aldığınız hata mesajını, * düzenlenmemiş *. – zwol

+0

Ayrıca, ikinci kod parçanızın ("aşağı indirilmiş"), adlarında boşluk bulunan dizinlerde doğru şekilde çalıştığını ve ilk kod parçanızın yanlış yönlendirildiğini ve bu yüzden test edemediğimi de unutmayın (sekmeleri kullanmayın). – zwol

+0

(Sorununuz, komut satırına ters eğik çizgi yazıyor olabilir mi? Bunu yapmayın. Kabuk bunu istiyor, ancak bu program yapmıyor.) – zwol

cevap

0

'\\' oluşumları için raw_input() öğesinden döndürülen değeri kontrol edin ve '' ile değiştirin.

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

Sadece bunu araştırdım ve sanırım aceleyle yaptığım şey de denediğin şeydi. Bir bakıma, hem @ zwol hem de trans1st0r haklıdır.

Kaydettiğiniz programın hiç bir sorunu yok. /Volumes/Disk/this is a folder girişini koyarsanız, her şeyin işe yarayacağına inanıyorum. Ancak, yaptığınız şey (ya da en azından ne yaptığımı), bir klasörü Finder'dan Terminal'e sürüklemektir. Terminal'e sürüklediğinizde, işletim sistemi otomatik olarak sizin için boşluklardan kaçar, bu nedenle Terminal'e yazılan sonuçların sayısı /Volumes/Disk/this\ is\ a\ folder'dur.

Bu nedenle ya "yazdığınız" öğesinin bu ters eğik çizgi olmadığından emin olabilirsiniz ya da @ trans1st0r'ın önerisini sürükleme işlevini desteklemenin bir yolu olarak kullanabilirsiniz, ancak bu durum kenarda sorunlara neden olur İstediğiniz yolun aslında içinde ters eğik çizgiler var.