某些Python函数的.NET等价物

时间:2010-07-20 16:03:37

标签: c# python porting

我正在尝试将一些Python代码移植到.NET,我想知道.NET中是否存在以下Python函数的等价物,或者某些具有相同功能的代码片段。

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

修改

Python中的os.path.basename()返回os.path.split的尾部,而不是System.IO.Path.GetPathRoot(path)的结果

我认为以下方法创建了一个合适的os.path.split函数端口,欢迎任何调整。它尽可能地遵循http://docs.python.org/library/os.path.html中对os.path.split的描述。

    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 个答案:

答案 0 :(得分:6)

您正在寻找System.IO.Path班级。

它有许多功能可用于获得相同的功能。

  • Path.GetDirectoryName(string)
  • 对于拆分,您可能希望在实际路径名上使用String.Split(...)。您可以通过Path.PathSeparator
  • 获取操作系统相关的分隔符
  • 如果我遗漏了关于os.path.split的要点且你想要文件名,请使用Path.GetFileName(string)

请注意:您可以使用Visual Studio中的对象浏览器(Ctrl + Alt + J)浏览System.IO命名空间的所有成员。从这里开始mscorlib - > System.IO并且所有类都可以在那里被发现。

就像破解时的智能感知一样:)

答案 1 :(得分:1)

<强> 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);

}

答案 2 :(得分:0)

Path.GetFileName Path.GetDirectoryName

http://msdn.microsoft.com/en-us/library/beth2052.aspx 应该帮忙

答案 3 :(得分:0)

为什么不使用IronPython并充分利用这两个世界?