【发布时间】:2015-02-12 11:03:39
【问题描述】:
假设我有一个代表目录的类(当然是简化示例):
import os
class Dir:
def __init__(self, path):
self.path = os.path.normcase(path)
为了使事情更容易在内部实现,我在将 path 参数保存到属性之前调用了 os.path.normcase。这很好用,但它会小写路径:
>>> import os
>>> os.path.normcase(r'C:\Python34\Lib')
'c:\\python34\\lib'
>>>
我想要一种将路径转换回其正确大写形式的C:\Python34\Lib 的方法。我计划在 __repr__ 方法中执行此操作,以便获得不错的输出,例如:
>>> my_dir
Dir(r'C:\Python34\Lib')
>>>
当我在交互式解释器中时。标准库中有这样的东西吗?
注意:我不是指用户作为path 参数提供的字符串。如果用户这样做:
my_dir = Dir('c:\PYTHON34\lib')
我仍然希望在解释器中打印Dir('C:\Python34\Lib'),因为这是正确的大写。基本上,我希望输出的路径与文件资源管理器中的路径相同。
【问题讨论】:
-
只是好奇,你为什么关心大小写?
-
@OozeMeister - 这只是出于审美原因。 :) 如果我打印我的
Dir对象或在字符串中使用它们,我希望有可读的路径。让路径匹配它们在资源管理器中的内容而不是全部小写似乎也更加用户友好。 -
@iCodez:为什么不存储原始路径并仅在需要进行比较时进行规范化?
-
也许您想使用标准库
pathlib模块,我记得它会为您处理不区分大小写的比较? -
@MartijnPieters - 我考虑过这一点,但我只是在
__str__和__repr__中使用了正确的路径,因为我在很多地方都使用了规范化路径。所以,我不想在每个使用它的方法中调用normcase。另外,我希望我的Dir类能够以大小写方式接受路径,但仅以正确、可读的形式输出它们。
标签: python windows python-3.x path