在Python中获取相对路径的任何优雅方式?

时间:2017-10-16 08:09:46

标签: python

我想在'Core.dll'之后删除'git pull',所以我写了一个钩子。

import os

dir = os.path.dirname(__file__)
try:
    os.remove(os.path.abspath(dir+os.sep+".."+os.sep+".."+os.sep+"Assets"+os.sep+"Plugins"+os.sep+"Core.dll"))

except OSError:
    pass

假设钩子路径为'E:\client\.git\hooks',我要删除的文件位于'E:\client\Assets\Plugins\Core.dll'.

我认为我的方式非常愚蠢,是否有任何优雅的方式来获得相对路径?

4 个答案:

答案 0 :(得分:5)

使用pathlib

ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(
    Object[].class,
    new ObjectArraySerializer(Object[].class));
objectMapper.registerModule(module);

答案 1 :(得分:3)

反解决方案是python 3中最好的。对于Python 2,您可以使用os.pardiros.path.join

os.path.abspath(os.path.join(d,os.pardir,os.pardir,"Assets","Plugins","Core.dll"))

答案 2 :(得分:1)

os.path.relpath就是你所要求的。您还应该使用os.path.join而不是那个长+ +和sep列表。在Python 3的pathlib中,有relative_to。您的代码似乎正在尝试应用相对路径,而不是以相对形式获取它。在这种情况下,joinpath和normpath或realpath可能会有所帮助。

答案 3 :(得分:0)

更易读的解决方案:

import os 
from contextlib import suppress

with suppress(OSError):
  dir = os.path.dirname(__file__)

  while '.git' in dir:
    dir = os.path.dirname(dir)

  os.remove(
    os.path.join(
      dir,
      'Assets',
      'Plugins',
      'Core.dll'
    )
  )