2013-06-24 3 views
8

Мне нужно проверить, существует ли данный файл или нет с учетом регистра.проверить os.path.isfile (имя файла) с учетом регистра в python

file = "C:\Temp\test.txt" 
if os.path.isfile(file): 
    print "exist..." 
else: 
    print "not found..." 

TEST.TXT файл присутствует в папке C: \ Temp. но сценарий, показывающий вывод «file exist» для файла = «C: \ Temp \ test.txt», должен показать «не найден».

Спасибо.

+0

Для того, чтобы быть понятным, вы хотите, чтобы 'файл' соответствовал' c: \ Temp \ TEST.TXT', или ** NOT ** соответствовать ему? – MattDMo

+2

Что вы хотите от операционной системы. В python 'C: \ Temp \ test.txt' и' C: \ Temp \ TEST.TXT' * точно * то же самое, поэтому результат, полученный вами 'isfile', верен. – Bakuriu

+0

(потому что файловые системы Windows не чувствительны к регистру) –

ответ

13

Список всех имен в каталоге, а не, так что вы можете сделать регистрозависимое матч:

def isfile_casesensitive(path): 
    if not os.path.isfile(path): return False # exit early 
    directory, filename = os.path.split(path) 
    return filename in os.listdir(directory) 

if isfile_casesensitive(file): 
    print "exist..." 
else: 
    print "not found..." 

Демо:

>>> import os 
>>> file = os.path.join(os.environ('TMP'), 'test.txt') 
>>> open(file, 'w') # touch 
<open file 'C:\\...\\test.txt', mode 'w' at 0x00000000021951E0> 
>>> os.path.isfile(path) 
True 
>>> os.path.isfile(path.upper()) 
True 
>>> def isfile_casesensitive(path): 
... if not os.path.isfile(path): return False # exit early 
... directory, filename = os.path.split(path) 
... return any(f == filename for f in os.listdir(directory)) 
... 
>>> isfile_casesensitive(path) 
True 
>>> isfile_casesensitive(path.upper()) 
False 
+0

Вам не нужно 'os.path.basename (файл) .lower()'? –

+0

@MatthewPlourde: Ну, конечно, да .. :-P Полностью продвинулось и провело проверку '.isfile()' тоже. –

+2

Я думаю, что он хочет наоборот, нет ?, т. Е. TEST.TXT! = Test.txt –

-3

os.path.isfile не чувствительны к регистру в Python 2.7 для окон

>>> os.path.isfile('C:\Temp\test.txt') 
True 
>>> os.path.isfile('C:\Temp\Test.txt') 
True 
>>> os.path.isfile('C:\Temp\TEST.txt') 
True 
+1

нечувствительные к регистру средства TEST = test .... все верно, как это противоречит? – throwaway2013

+1

Нет, слишком много отвлекающих факторов, вы правы. Однако это * не * ответ; ОП спрашивает, как сделать тест * чувствительный *. –