Получение абсолютного пути без разрешения символических ссылок в python [duplicate]

Как и @Maximiliangerhardt, MiniJson не имеет возможности десериализоваться должным образом. Я использовал JsonFx и работал как шарм. Работает с []

player[] p = JsonReader.Deserialize<player[]>(serviceData);
Debug.Log(p[0].playerId +" "+ p[0].playerLoc+"--"+ p[1].playerId + " " + p[1].playerLoc+"--"+ p[2].playerId + " " + p[2].playerLoc);
520
задан Mechanical snail 18 August 2012 в 23:49
поделиться

9 ответов

>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Также работает, если он уже является абсолютным путем:

>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
712
ответ дан JakeD 21 August 2018 в 10:44
поделиться
  • 1
    Примечание. На большинстве платформ это эквивалентно вызову функции normpath() следующим образом: normpath(join(os.getcwd(), path)). Поэтому, если mydir/myfile.txt не находится под os.getcwd(), абсолютный путь не является реальным путем . – coanor 25 November 2014 в 05:15
  • 2
    @coanor? Без явного корня mydir/myfile.txt неявно ссылается на путь внутри текущего рабочего каталога, поэтому он эквивалентен ./mydir/myfile.txt. Это может быть не путь, который вы намеревались ввести, но, насколько я могу судить, это кажется правильной интерпретацией пути. Не могли бы вы уточнить? – jpmc26 8 January 2015 в 23:46
  • 3
  • 4
  • 5

Если кто-то использует python и linux и ищет полный путь к файлу:

>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file
0
ответ дан BND 21 August 2018 в 10:44
поделиться

, если вы находитесь на mac

import os
upload_folder = os.path.abspath("static/img/users")

, это даст вам полный путь:

print(upload_folder)

покажет следующий путь:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user
0
ответ дан chikwapuro 21 August 2018 в 10:44
поделиться

Я предпочитаю использовать glob

, вот как перечислить все типы файлов в вашей текущей папке:

import glob
for x in glob.glob():
    print(x)

вот как перечислить все (например) .txt файлы в вашей текущей папке:

import glob
for x in glob.glob('*.txt'):
    print(x)

вот как перечислить все типы файлов в выбранном каталоге:

import glob
for x in glob.glob('C:/example/hi/hello/'):
    print(x)

надеюсь, что это помогло вам

3
ответ дан F. Taylor 21 August 2018 в 10:44
поделиться
  • 1
    Кажется, вы отвечаете на другой вопрос. Это не «Как мне получить путь?», Но «абсолютный путь». Можно применить правильный ответ (os.path.abspath()) к любому относительному пути glob для ваших первых двух случаев ... – NichtJens 14 July 2017 в 23:05
filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)
-1
ответ дан frank__aguirre 21 August 2018 в 10:44
поделиться
  • 1
    Вопрос не в том, как переименовать изображения или что-то вроде этого. Его просили только 5-ю строку filePath = os.path... – derM 29 April 2017 в 10:08
  • 2
    derM да, вы правы, я смотрел на что-то еще, когда писал это. Я удалил то, что не имеет отношения к вопросу на этой странице. – frank__aguirre 30 April 2017 в 08:47

Вы можете использовать новую библиотеку Python 3.4 pathlib. (Вы также можете получить его для Python 2.6 или 2.7 с помощью pip install pathlib.) Авторы писали : «Цель этой библиотеки - предоставить простую иерархию классов для обработки путей файловой системы и общих операций пользователи делают над ними ».

Чтобы получить абсолютный путь в Windows:

>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'

Или в UNIX:

>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'

Документы находятся здесь: https://docs.python.org/3/library/pathlib.html

48
ответ дан Martijn Pieters 21 August 2018 в 10:44
поделиться
  • 1
    Очень полезно. Использование os.path.abspath() дало мне ошибку: AttributeError: 'NoneType' object has no attribute 'startswith', используя Path().resolve(), не имеет одинаковую относительную путь к файлу. (Linux и Python3.4) – NuclearPeon 31 August 2015 в 16:14

Сегодня вы также можете использовать пакет unipath, который был основан на path.py: http://sluggo.scrapping.cc/python/unipath/

>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>

Я бы рекомендовал использовать этот пакет, поскольку он предлагает чистый интерфейс для общих утилит os.path .

12
ответ дан Rudolf Olah 21 August 2018 в 10:44
поделиться

Еще лучше установите модуль path.py , он переносит все функции os.path и другие связанные функции в методы объекта, которые могут использоваться везде, где используются строки:

>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
22
ответ дан Tom 21 August 2018 в 10:44
поделиться
  • 1
    Слишком плохо, что у них никогда не было подходящего модуля абстракции имени файла в stdlib. – Torsten Marek 26 September 2008 в 13:08
  • 2
    @ Торстен Марек: это больное и давнее упущение. – flow 12 February 2011 в 00:58
  • 3
    Теперь они сделали для Python 3.4: pathlib. См. Мой ответ в этой теме. – twasbrillig 24 October 2014 в 02:20
  • 4
    В этом ответе есть yypos. Это должно быть from path import Path, тогда Path('mydir/myfile.txt').abspath() – frakman1 5 June 2017 в 14:51
  • 5
    Нет опечаток, возможно, вы использовали другой модуль path. Связанный модуль использует класс с именем path. – Tom 6 June 2017 в 23:42
>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>> 
52
ответ дан Will Harris 21 August 2018 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: