我想要具有与之相同的效果的东西:
>>> path = "/foo/bar/baz/file"
>>> path_split = path.rsplit('/')[1:]
>>> path_split
['foo', 'bar', 'baz', 'file']
但这也适用于Windows路径。我知道这里有一个,os.path.split()
但是并不能满足我的要求,而且我也没有看到任何可以满足要求的东西。
OP指定“也将适用于Windows路径”。Windows路径有一些折痕。
首先,Windows有多个驱动器的概念,每一个都有自己当前的工作目录,'c:foo'
而'c:\\foo'
往往是不一样的。因此,最好先使用os.path.splitdrive()分离出任何驱动器指示符。然后可以通过以下方法正确地重新组装路径(如果需要)
drive + os.path.join(*other_pieces)
其次,Windows路径可以包含斜杠或反斜杠或混合使用。因此,os.sep
在解析非规范化路径时使用是没有用的。
更普遍:
产生的结果'foo'
和'foo/'
不应相同。
最好以“ os.path.split()将其输入视为不可拆分”来表示循环终止条件。
这是一个建议的解决方案,带有测试,包括与@Spacedman解决方案的比较
import os.path
def os_path_split_asunder(path, debug=False):
parts = []
while True:
newpath, tail = os.path.split(path)
if debug: print repr(path), (newpath, tail)
if newpath == path:
assert not tail
if path: parts.append(path)
break
parts.append(tail)
path = newpath
parts.reverse()
return parts
def spacedman_parts(path):
components = []
while True:
(path,tail) = os.path.split(path)
if not tail:
return components
components.insert(0,tail)
if __name__ == "__main__":
tests = [
'',
'foo',
'foo/',
'foo\\',
'/foo',
'\\foo',
'foo/bar',
'/',
'c:',
'c:/',
'c:foo',
'c:/foo',
'c:/users/john/foo.txt',
'/users/john/foo.txt',
'foo/bar/baz/loop',
'foo/bar/baz/',
'//hostname/foo/bar.txt',
]
for i, test in enumerate(tests):
print "\nTest %d: %r" % (i, test)
drive, path = os.path.splitdrive(test)
print 'drive, path', repr(drive), repr(path)
a = os_path_split_asunder(path)
b = spacedman_parts(path)
print "a ... %r" % a
print "b ... %r" % b
print a == b
这是输出(Python 2.7.1,Windows 7 Pro):
Test 0: ''
drive, path '' ''
a ... []
b ... []
True
Test 1: 'foo'
drive, path '' 'foo'
a ... ['foo']
b ... ['foo']
True
Test 2: 'foo/'
drive, path '' 'foo/'
a ... ['foo', '']
b ... []
False
Test 3: 'foo\\'
drive, path '' 'foo\\'
a ... ['foo', '']
b ... []
False
Test 4: '/foo'
drive, path '' '/foo'
a ... ['/', 'foo']
b ... ['foo']
False
Test 5: '\\foo'
drive, path '' '\\foo'
a ... ['\\', 'foo']
b ... ['foo']
False
Test 6: 'foo/bar'
drive, path '' 'foo/bar'
a ... ['foo', 'bar']
b ... ['foo', 'bar']
True
Test 7: '/'
drive, path '' '/'
a ... ['/']
b ... []
False
Test 8: 'c:'
drive, path 'c:' ''
a ... []
b ... []
True
Test 9: 'c:/'
drive, path 'c:' '/'
a ... ['/']
b ... []
False
Test 10: 'c:foo'
drive, path 'c:' 'foo'
a ... ['foo']
b ... ['foo']
True
Test 11: 'c:/foo'
drive, path 'c:' '/foo'
a ... ['/', 'foo']
b ... ['foo']
False
Test 12: 'c:/users/john/foo.txt'
drive, path 'c:' '/users/john/foo.txt'
a ... ['/', 'users', 'john', 'foo.txt']
b ... ['users', 'john', 'foo.txt']
False
Test 13: '/users/john/foo.txt'
drive, path '' '/users/john/foo.txt'
a ... ['/', 'users', 'john', 'foo.txt']
b ... ['users', 'john', 'foo.txt']
False
Test 14: 'foo/bar/baz/loop'
drive, path '' 'foo/bar/baz/loop'
a ... ['foo', 'bar', 'baz', 'loop']
b ... ['foo', 'bar', 'baz', 'loop']
True
Test 15: 'foo/bar/baz/'
drive, path '' 'foo/bar/baz/'
a ... ['foo', 'bar', 'baz', '']
b ... []
False
Test 16: '//hostname/foo/bar.txt'
drive, path '' '//hostname/foo/bar.txt'
a ... ['//', 'hostname', 'foo', 'bar.txt']
b ... ['hostname', 'foo', 'bar.txt']
False
问题内容: 我想在Unix和Windows上使用特定于平台的目录。请看一下代码: 这个输出 我想第二次打电话给(windows)类似 是否可以告诉我在Windows上运行的程序使用Windows分隔符?还是应该始终将反斜杠转换 为正斜杠()?这里首选的策略是什么? 问题答案: 我看到“问题”在哪里。在golang-nuts上的讨论为我提供了提示,该提示始终使用并且是用于依赖平台的操作的函数。 在W
问题内容: 我正在使用以下代码在Linux / OSX上为Python库隐藏stderr,但我不控制默认情况下写入stderr的Python库: 是否有一个简单的跨平台替代/ dev / null?理想情况下,它不会消耗内存,因为这是一个长期运行的过程。 问题答案: os.devnull怎么样?
问题内容: 我知道文件的相对路径,并希望将其作为 Linux和Windows上的对象来处理。 在Java中指定平台无关路径的最佳方法是什么? 问题答案: 本类包含可用于特定平台的文件路径下面的公共成员: 系统相关的路径分隔符,为方便起见,用字符串表示。 系统相关的路径分隔符。 系统相关的默认名称分隔符,为方便起见,以字符串形式表示。
多平台支持 Mpx支持在多个小程序平台中进行增强,目前支持的小程序平台包括微信,支付宝,百度,qq和头条,不过自2.0版本后,Mpx支持了以微信增强语法为base的跨平台输出,实现了一套业务源码在多端输出运行的能力,大大提升了多小程序平台业务的开发效率,详情可以查看template增强特性 不同平台上的模板增强指令按照平台的指令风格进行设计,文档和代码示例为了方便统一采用微信小程序下的书写方式。
问题内容: 我需要在python终端程序中监听某些按键,而不必使用暂停执行。我已经看到人们使用一些特定于Windows的方式来监听按键,并且我看到人们使用了诸如tkinter和pygame之类的大型模块,这些模块我想避免。 是否有一个轻量级的模块可以跨平台运行(至少是ubuntu,windows,mac)?还是有一种方法可以只使用来自tkinter,pygame等的事件系统? 如果没有,我应该如何
问题内容: 您可能知道,Mac OS X中保存的快捷方式是 Windows ,而关闭应用程序的快捷方式是 Windows 。但是问题是如何在Java应用程序中执行这些操作?我是否需要查找我在应用程序中使用的所有快捷方式,并根据不同的操作系统来匹配相关功能?有什么建议吗?谢谢。 问题答案: 该方法在这种情况下很有用。该方法在Windows上返回时,在Mac OS X上返回。所得的掩码可用于构造菜单项