我喜欢Python,因为它包含电池,而且我使用内置函数来为我做脏事。
我一直在愉快地使用os.path模块来处理文件路径但是最近我在Ubuntu linux下的Python 2.5上得到了意想不到的结果,同时处理代表windows文件路径的字符串:
filepath = r"c:\ttemp\FILEPA~1.EXE"
print os.path.basename(filepath)
'c:\\ttemp\\FILEPA~1.EXE']
print os.path.splitdrive(filepath)
('', 'c:\ttemp\\FILEPA~1.EXE')
WTF?
它以与filepath = u“c:\ ttemp \ FILEPA~1.EXE”和filepath =“c:\ ttemp \ FILEPA~1.EXE”相同的方式结束。
你有线索吗? Ubuntu使用UTF8,但我不觉得它与它有关。也许我的Python安装搞砸了,但我没有对它进行任何特别的调整,我记得。
答案 0 :(得分:24)
如果你想在linux上操作Windows路径,你应该使用ntpath模块(这是在windows上作为os.path导入的模块 - posixpath在linux上作为os.path导入)
>>> import ntpath
>>> filepath = r"c:\ttemp\FILEPA~1.EXE"
>>> print ntpath.basename(filepath)
FILEPA~1.EXE
>>> print ntpath.splitdrive(filepath)
('c:', '\\ttemp\\FILEPA~1.EXE')
答案 1 :(得分:3)
来自os.path
文档:
<强> os.path.splitdrive(路径)强>
将路径名路径拆分为一对(驱动器,尾部),其中驱动器是驱动器规范或空字符串。在不使用驱动器规格的系统上,驱动器将始终为空字符串。在所有情况下,drive + tail将与path相同。
如果你在unix上运行它,它不使用驱动器规格,因此 - 驱动器将是空字符串。
如果要在任何平台上解决Windows路径,可以使用简单的正则表达式:
import re
(drive, tail) = re.compile('([a-zA-Z]\:){0,1}(.*)').match(filepath).groups()
drive
将是一封驱动器号,后跟:
(例如c:
,u:
)或None
,tail
整个休息:)
答案 2 :(得分:1)