2010-10-17 2 views
1

Всякий раз, когда я вызываю os.path.exists (variable), он возвращает false, но если я назову os.path.exists ('/ this/is/my/path'), он будет return true.os.path.exists не принимает переменный ввод

import os 
import sys 

test = None 
print("Test directory") 
test= sys.stdin.readline() 
test.strip('\n') 
print(os.path.exists(test)) 

Я знаю, что os.path.exists может возвращать ложь, если есть ошибка разрешения, но каталоги я ссылку не имеют каких-либо ограничений. Иногда у моих путей есть пробелы. Я пытаюсь передать путь как «/ this \ is/my/path» и «/ this/my/path с теми же результатами».

+1

Когда вы добавляете 'print (test)' прямо перед вызовом 'exist', что он показывает? –

+0

Я получаю ту же строку назад. – ghostTower

+0

Я изменил его test = test.strip ('\ n'), и я все еще получаю False – ghostTower

ответ

6

Вы должны сделать

test = test.strip("\n") 

Строки неизменны, поэтому strip()возвращает новую строку.

(По крайней мере, ваш код работает для меня тогда, если он еще не работает для вас, это должно быть что-то еще.)

1

strip() не изменяет строку, она возвращает новую строку. Попробуйте это:

import os 
import sys 
sys.stdout.write("Test directory: ") 
test = sys.stdin.readline().strip('\n') 
sys.stdout.write(str(os.path.exists(test)) + "\n") 

(я использую sys.stdout.write() вместо print() для Python-3 agnosticity.)

+3

'print (foo)' работает как в Python 2, так и 3. 'print (foo, bar)' kinda работает в Python 2, слишком. Не нужно, чтобы этот уродливый в экзамене просто был переносимым. И в реальном коде вы должны написать его для одного и преобразовать его через '2to3' или' 3to2' ... – delnan

+0

Да, узнайте что-то новое каждый день. Я думаю, что Python 2 обрабатывает круглые скобки как конструктор кортежа? Честно говоря, в реальном коде я предпочитаю '[sys.] Stdout.write'' 'print' в любом случае, потому что я менее волшебный парень. – zwol

+0

'(выражение)' само является просто 'expression', но' (expr1, expr2) 'является кортежем, да. Но почему избежать печати? Это не «волшебство» (для повторной реализации на Python требуется менее 10 строк straighforward), это действительно полезная функция. – delnan

0

, что вы должны сделать, это либо:

test = test.strip('\n') 

или

print(os.path.exists(test.strip('\n')) 

для того, что они сказали выше, strip() возвращает новую строку, поэтому для проверки hav e новая строка, которую вы должны переназначить ему. (или во втором случае используйте новую строку прямо в path.exists())

Смежные вопросы