Я пытаюсь проверить, существует ли файл в Python, используя os.path.isfile(), но он возвращает false, хотя файл существует. Например, когда я печатаю /Users/jordanbaron/Desktop/hero-bg.jpg, это вывод

Enter the directory to the ISO file (or just drag the file here): /Users/jordanbaron/Desktop/hero-bg.jpg 
/Users/jordanbaron/Desktop/hero-bg.jpg 
<type 'str'>
False

И файл действительно существует.

file

Почему это происходит?

filename = raw_input("Enter the directory to the ISO file (or just drag the file here): ")
print(filename)
print(type(filename))
print(os.path.isfile(filename))
-2
Jordan Baron 25 Апр 2017 в 02:06

2 ответа

Лучший ответ

Ваш код, как опубликовано, работает:

Файл существует

/usr/bin/python2.7 /home/surest/github/tests/test.py
Enter the directory to the ISO file (or just drag the file here): /home/surest/Desktop/duties.odt
/home/surest/Desktop/duties.odt
<type 'str'>
True


Process finished with exit code 0

Опечатка в имени файла / пути

 /usr/bin/python2.7 /home/surest/github/tests/test.py
Enter the directory to the ISO file (or just drag the file here): /home/surest/Desktop/meesa-typoed.odt
/home/surest/Desktop/meesa-typoed.odt
<type 'str'>
False

Process finished with exit code 0
2
24 Апр 2017 в 23:33

Windows 7, Python 2.7

Если вы работаете с не ASCII-буквами, вам следует правильно декодировать ввод. Возможно, в вашем пути к файлу нет букв ASCII, которые мы не видим. Попробуйте этот код:

# -*- coding: utf-8 -*-
import os, sys, locale

filename = raw_input("Enter filepath: ").decode(sys.stdin.encoding or locale.getpreferredencoding(True))
print(filename)
print(type(filename))
print(os.path.exists(filename))

Работает для пути с кириллицей:

C:\Projects>c:\Python27\python.exe filepath.py
Enter filepath: c:\Projects\темп\jordanbaron\Рабочий стол\hero-bg.jpg
c:\Projects\темп\jordanbaron\Рабочий стол\hero-bg.jpg
<type 'unicode'>
True
0
FooBar167 25 Апр 2017 в 00:36
43599036