ATO*_*TOA 77 python python-2.7 os.path
我可以
>>> os.path.join("c:/","home","foo","bar","some.txt")
'c:/home\\foo\\bar\\some.txt'
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做的时候
>>> s = "c:/,home,foo,bar,some.txt".split(",")
>>> os.path.join(s)
['c:/', 'home', 'foo', 'bar', 'some.txt']
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
ATO*_*TOA 151
问题是,os.path.join不list作为参数,它必须是单独的参数.
这就是*'splat'运营商发挥作用的地方......
我可以
>>> s = "c:/,home,foo,bar,some.txt".split(",")
>>> os.path.join(*s)
'c:/home\\foo\\bar\\some.txt'
Run Code Online (Sandbox Code Playgroud)
Tho*_*anz 19
假设join不是那样设计的(正如ATOzTOA指出的那样),并且它只使用了两个参数,你仍然可以使用内置的reduce:
>>> reduce(os.path.join,["c:/","home","foo","bar","some.txt"])
'c:/home\\foo\\bar\\some.txt'
Run Code Online (Sandbox Code Playgroud)
相同的输出如:
>>> os.path.join(*["c:/","home","foo","bar","some.txt"])
'c:/home\\foo\\bar\\some.txt'
Run Code Online (Sandbox Code Playgroud)
仅仅是出于完整性和教育原因(以及其他*不起作用的情况).
提示Python 3
对于Python 3,reduce已移至functools模块.
我偶然发现列表可能为空的情况.在这种情况下:
os.path.join('', *the_list_with_path_components)
Run Code Online (Sandbox Code Playgroud)
注意第一个参数,它不会改变结果.
这只是方法。您什么都不会错过。在官方文件显示,你可以用列表拆包提供几条路径:
s = "c:/,home,foo,bar,some.txt".split(",")
os.path.join(*s)
Run Code Online (Sandbox Code Playgroud)
注意in中的*sintead 。使用星号将触发列表的解压缩,这意味着每个列表参数将作为单独的参数提供给函数。sos.path.join(*s)
| 归档时间: |
|
| 查看次数: |
95738 次 |
| 最近记录: |