.NET-эквиваленты некоторых функций Python - PullRequest
1 голос
/ 20 июля 2010

Я пытаюсь перенести некоторый код Python в .NET, и мне было интересно, есть ли эквиваленты следующих функций Python в .NET, или некоторые фрагменты кода, имеющие такую ​​же функциональность.

os.path.split()
os.path.basename()

Edit

os.path.basename () в Python возвращает хвост os.path.split, а не результат System.IO.Path.GetPathRoot (path)

Я думаю, что следующий метод создает подходящий порт функции os.path.split, любые изменения приветствуются.Это следует из описания os.path.split от http://docs.python.org/library/os.path.html настолько, насколько я могу поверить.

    public static string[] PathSplit(string path)
    {
        string head = string.Empty;
        string tail = string.Empty;

        if (!string.IsNullOrEmpty(path))
        {
            head = Path.GetDirectoryName(path);
            tail = path.Replace(head + "\\", "");
        }

        return new[] { head, tail };
    }

Я не уверен в том, как я возвращаю голову и хвост, так какЯ действительно не хотел передавать голову и хвост через параметры метода.

Ответы [ 4 ]

6 голосов
/ 20 июля 2010

Вы ищете класс System.IO.Path.

Он имеет много функций, которые вы можете использовать, чтобы получить те же функции.

  • Path.GetDirectoryName(string)
  • Для разделения, вы, вероятно, захотите использовать String.Split(...) в качестве фактического имени пути. Вы можете получить зависимый от ОС разделитель по Path.PathSeparator.
  • В случае, если он упускает точку около os.path.split и вам нужно имя файла, используйте Path.GetFileName(string).

Обратите внимание: вы можете изучить все члены пространства имен System.IO, используя Object Browser (Ctrl + Alt + J) в Visual Studio. Отсюда вы идете mscorlib -> System.IO и все классы будут там обнаружены.

Это как Intellisense на трещине:)

1 голос
/ 20 июля 2010

os.path.basename ()

Альтернатива System.IO.Path.GetPathRoot(path);:

System.IO.Path.GetPathRoot("C:\\Foo\\Bar.xml") // Equals C:\\

Редактировать : Вышеприведенное вернуло первый путь пути, где basename должен вернуть хвост пути. Посмотрите код ниже для примера того, как этого можно достичь.

os.path.split ()

К сожалению, альтернативы этому нет, поскольку нет эквивалента .Net. Самое близкое, что вы можете найти, это System.IO.Path.GetDirectoryName(path), однако, если ваш путь был C: \ Foo , то GetDirectoryName даст вам C: \ Foo вместо C: и Foo . Это сработает, только если вы захотите получить имя каталога фактического пути к файлу.

Так что вам придется написать какой-то код, подобный следующему, чтобы разбить их для вас:

public void EquivalentSplit(string path, out string head, out string tail)
{

    // Get the directory separation character (i.e. '\').
    string separator = System.IO.Path.DirectorySeparatorChar.ToString();

    // Trim any separators at the end of the path
    string lastCharacter = path.Substring(path.Length - 1);
    if (separator == lastCharacter)
    {
        path = path.Substring(0, path.Length - 1);
    }

    int lastSeparatorIndex = path.LastIndexOf(separator);

    head = path.Substring(0, lastSeparatorIndex);
    tail = path.Substring(lastSeparatorIndex + separator.Length,
        path.Length - lastSeparatorIndex - separator.Length);

}
0 голосов
/ 20 июля 2010

Почему бы просто не использовать IronPython и получить лучшее из обоих миров?

0 голосов
/ 20 июля 2010

Path.GetFileName Path.GetDirectoryName

http://msdn.microsoft.com/en-us/library/beth2052.aspx Должно помочь

...