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")
это сработало для меня.