Python path.exists() возвращает False

Я создаю базовый файловый сервер, и моя программа не может найти файлы.

def sendfile(sock, myfile):
    print 'Serving file:', myfile
    print 'File exists?:', os.path.exists(myfile)

    path = os.path.normpath(os.path.join(os.getcwd(), myfile))
    print 'Serving file:', path
    print 'File exists?:', os.path.exists(path)

Они всегда возвращают False, даже если "myfile" и "path" верны [файл находится в том же каталоге, что и серверная программа].

IDLE отлично работает, но не переходит к функциям.

>>> print os.path.exists("/user/server/foo.txt")  
True

Что я пропустил?

[EDIT:] Выход:

Serving file: foo.txt

File exists?: False
Serving file: /user/server/foo.txt

File exists?: False

Ответ 1

Я почти на 100% уверен, что вы не дезинфицируете свой вход, прежде чем проверять, существует ли путь. Здесь что-то, что я использовал в моем интерпретаторе:

>>> from os.path import exists
>>> exists('dog.png')
True
>>> exists('dog.png\n')
False

Попробуйте удалить пробелы на path прежде чем вы сможете проверить, существует ли он.

Ответ 2

Если вы прочитали документацию python для os.path.exists(), в нем говорится, что существуют определенные случаи, когда файл или папка существует, но os.path.exists() возвращает false:

Вернуть True, если путь относится к существующему пути или описателю открытого файла. Возвращает False для сломанных символических ссылок. На некоторых платформах эта функция может возвращать False, если разрешение не предоставлено для выполнения os.stat() в запрошенном файле, даже если путь физически существует.

Ответ 3

Это может не ответить на ваш вопрос напрямую, но вы можете пойти с методом "try/except": любая функция, использующая файл, должна возвращать исключение, если файл не существует (особенно если он встроен в функцию), и вы могут действовать соответствующим образом. Тогда вам не нужно проверять, существует ли файл самостоятельно. Опасные? Возможно, но это зависит от того, что вы на самом деле пытаетесь сделать.

Ответ 4

Как сказано в этом ответе это в основном происходит с пробелами.

Я тоже сталкивался с этой проблемой. Мне понадобилось много времени, чтобы понять это.

В python есть функция strip(), которая удаляет пробелы.

если переменная path_to_file содержит путь к реальному файлу, попробуйте использовать

if path.exists(path_to_file.strip())
        print("file exists")
else:
        print("file does not exist")

это сработало для меня.