我正在尝试将一些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 };
}
我不确定我返回头部和尾部的方式,因为我真的不想通过参数传递头部和尾部的方法。
答案 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
答案 3 :(得分:0)
为什么不使用IronPython并充分利用这两个世界?