Сравнение путей с учетом регистра в Python - PullRequest
4 голосов
/ 15 июля 2011

Я должен проверить, присутствует ли в файле определенный путь в Mac OS X.

В каталоге есть файл с именем foo.F90.

Но когда я делаю if(os.path.exists(PATH_TO_foo.f90)), он возвращает true и не замечает, что f90 - это строчные буквы, а существующий файл - это прописные буквы F90.

Я пытался open(PATH_TO_foo.f90, "r"), даже это не работает

Как мне обойти это?

Ответы [ 5 ]

7 голосов
/ 15 июля 2011

Как отмечают некоторые комментаторы, Python на самом деле не заботится о регистрах в путях в нечувствительных к регистру файловых системах, поэтому ни одна из функций сравнения путей или манипулирования не будет делать то, что вам нужно.

Однако выможет косвенно проверить это с помощью os.listdir(), который дает вам содержимое каталога с их фактическими данными.Учитывая это, вы можете проверить, существует ли файл с чем-то вроде:

'foo.f90' in os.listdir('PATH_TO_DIRECTORY')
0 голосов
/ 21 августа 2015

Я думаю, что это должно сработать для вас -

    import os  

    def exists(path):  
        import win32api  
        if path.find('/') != -1:  
            msg = 'Invalid path for Windows %s'%path  
            raise Exception(msg)  
        path = path.rstrip(os.sep)  
        try:  
            fullpath = win32api.GetLongPathNameW(win32api.GetShortPathName(path))  
        except Exception, fault:  
            return False  
        if fullpath == path:  
            return True  
        else:
            return False
0 голосов
/ 15 июля 2011

Если путь меняется между системами или чем-то, что вы могли бы использовать:

import os, fnmatch

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, 'foo.*'):
        print file

Это вернет все файлы foo.

0 голосов
/ 15 июля 2011

Итак, поскольку у вас нет чувствительной к регистру файловой системы, как насчет

import os
if 'foo.F90' in os.listdir(PATH_TO_DIRECTORY):
    open(PATH_TO_DIRECTORY + 'foo.F90')
0 голосов
/ 15 июля 2011

Это связано с вашей операционной системой, а не с Python. Например, в Windows файловая система нечувствительна к регистру, а в Linux она чувствительна к регистру. Поэтому, если я выполню ту же проверку, что и вы, в системе, основанной на Linux, я не вернусь при совпадении без учета регистра -

>>> os.path.exists('F90')
True
>>> os.path.exists('f90')
False                      # on my linux based OS

Тем не менее, если вы действительно хотите найти решение, вы можете сделать это -

if 'f90' in os.listdir(os.path.dirname('PATH_TO_foo.f90')):
    # do whatever you want to do
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...