Реверс os.path.normcase в Windows

Если Вы пишете Средства управления UI (ASPX, WinForms, WPF...) необходимо постараться не выдавать исключения в конструкторе, потому что разработчик (Visual Studio) не может обработать их, когда это создает средства управления. Знайте свой жизненный цикл управления (события управления) и используйте ленивую инициализацию по мере возможности.

6
задан pkit 4 December 2009 в 11:32
поделиться

3 ответа

Я бы не стал считать это решение простым , но вы можете сделать следующее:

import os
d = os.path.normcase('C:\\StackOverFlow')
files = os.listdir(os.path.dirname(d))
for f in files:
  if not d.endswith(f.lower()):
    continue
  else
    real_d = os.path.join(os.path.dirname(d), f)

Это, вероятно, неэффективно (в зависимости от количества файлов в каталоге) . Требуется настройка компонентов пути (мое решение действительно исправляет только регистр имени файла и не заботится об именах каталогов). Также, возможно, os.walk может оказаться полезным для спуска по дереву.

1
ответ дан 17 December 2019 в 20:32
поделиться

Подход грязного взлома,

import glob
...
if os.path.exists(d):
    d_real = glob.glob(d + '*')[0][:len(d)]
0
ответ дан 17 December 2019 в 20:32
поделиться

Определенно некрасиво, но забавно:

def getRealDirPath(path):
    try:
        open(path)
    except IOError, e:
        return str(e).split("'")[-2]

Конечно:

  • работает только с каталогами
  • будет работать с ошибками, если каталог не может быть открыт по другой причине

Но все же может быть полезным если он вам не нужен для кода типа «жизнь или смерть».

Пытался использовать стандартную библиотеку с помощью grep, чтобы найти, как они нашли реальный путь, но не смогли его найти. Должно быть в C.

Это был грязный прием дня, в следующий раз мы будем использовать регулярное выражение в stacktrace только потому, что мы можем: -)

-1
ответ дан 17 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: