2016-04-11 7 views
3

Я ноб в кодировании Python, и я столкнулся с чем-то, с которым мне не помогает никакая информация. Я пытаюсь написать простой инструмент для внесения в список каталогов, и я не могу иметь дело с Spaces в имени каталога в OSX. Мой код выглядит следующим образом:Пробелы в пути к каталогу 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) 

При подаче путь к каталогу, который содержит пробелы/Volumes/диск/это папка возвращает

«нет такого файла или каталога: '/ Volumes/Disk/это \\ не \\ а \\ папка /'

Похоже, что он убежал от побега ...?

+0

Показанный код не может отобразить сообщение об ошибке. Пожалуйста, покажите код, который вы фактически используете, * unedited *, точный ввод, который вы ему дали, * неотредактированный * и сообщение об ошибке, которое вы действительно получили, * unedited *. – zwol

+0

Обратите также внимание, что ваш второй фрагмент кода («свариваемый») работает правильно в каталогах с пробелами в их именах, а ваш первый фрагмент кода стал неверным, и поэтому я не могу его протестировать (не используйте вкладки). – zwol

+0

(Возможно, ваша проблема заключается в том, что вы набираете обратную косую черту в своем приглашении? Не делайте этого. Оболочка хочет этого, но эта программа не делает этого.) – zwol

ответ

0

Проверьте значение, возвращенное из raw_input(), для случаев «\\» и замените их на «».

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

Я просто столкнулся с этим, и я предполагаю, что то, что я спешно делаю, также и то, что вы пытались. В некотором смысле, как @zwol, так и @ trans1st0r являются правильными.

Ваша сбитая программа не имеет ничего плохого в этом. Я считаю, что если вы введете вход /Volumes/Disk/this is a folder, все будет работать нормально.

Однако, что вы, возможно, делали (или, по крайней мере, то, что я делал), перетаскивает папку из Finder в терминал. Когда вы перетаскиваете к терминалу, ОС автоматически ускользает от пробелов для вас, поэтому то, что заканчивается тем, что вводится в терминал, равно /Volumes/Disk/this\ is\ a\ folder.

Таким образом, вы можете убедиться, что то, что вы «вводите», не имеет этих обратных косых черт, или вы можете использовать предложение @ trans1st0r как способ поддержки функции перетаскивания, хотя последнее вызовет проблемы в краевом случае что ваш желаемый путь на самом деле имеет обратные косые черты в нем.