Domanda

Dato un percorso come "mydir/myfile.txt", come posso trovare il percorso assoluto del file relativo alla directory di lavoro corrente in Python?Per esempio.su Windows, potrei ritrovarmi con:

"C:/example/cwd/mydir/myfile.txt"
È stato utile?

Soluzione

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

Funziona anche se è già un percorso assoluto:

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

Altri suggerimenti

Potresti usare la nuova libreria Python 3.4 pathlib.(Puoi anche ottenerlo per Python 2.6 o 2.7 usando pip install pathlib.) Gli autori ha scritto:"Lo scopo di questa libreria è fornire una semplice gerarchia di classi per gestire i percorsi dei filesystem e le operazioni comuni che gli utenti eseguono su di essi."

Per ottenere un percorso assoluto in Windows:

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

O su UNIX:

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

I documenti sono qui: https://docs.python.org/3/library/pathlib.html

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

Meglio ancora, installa il modulo (che trovi su PyPI), avvolge tutto il os.path funzioni e altre funzioni correlate in metodi su un oggetto che possono essere utilizzati ovunque vengano utilizzate stringhe:

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

Oggi puoi anche usare il unipath pacchetto su cui era basato 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
>>>

Consiglierei di utilizzare questo pacchetto così come offre un'interfaccia pulita per le utilità comuni di os.path.

Aggiornamento per Python 3.4+ pathlib che in realtà risponde alla domanda:

from pathlib import Path

relative = Path("mydir/myfile.txt")
absolute = relative.absolute()  # absolute is a Path object

Se hai solo bisogno di una stringa temporanea, tieni presente che puoi utilizzare Path oggetti con tutte le funzioni rilevanti in os.path, compreso ovviamente abspath:

from os.path import abspath

absolute = abspath(relative)  # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

Notare che expanduser è necessario (su Unix) nel caso in cui l'espressione data per il nome e la posizione del file (o directory) possa contenere un'iniziale ~/(la tilde si riferisce alla directory home dell'utente) e expandvars si prende cura di qualsiasi altra variabile d'ambiente (come $HOME).

Preferisco usare glob

ecco come elencare tutti i tipi di file nella cartella corrente:

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

ecco come elencare tutti (ad esempio) i file .txt nella cartella corrente:

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

ecco come elencare tutti i tipi di file in una directory scelta:

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

spero che questo ti abbia aiutato

Modulo os fornisce un modo per trovare il percorso degli addominali.

MA la maggior parte dei percorsi in Linux iniziano con ~ (tilde), che non dà un risultato soddisfacente.

quindi puoi usare srblib per quello.

>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'

installarlo utilizzando python3 -m pip install srblib

https://pypi.org/project/srblib/

se sei su un Mac

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

questo ti darà un percorso completo:

print(upload_folder)

mostrerà il seguente percorso:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user

Nel caso in cui qualcuno utilizzi Python e Linux e cerchi il percorso completo del file:

>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file

Questo Sempre ottiene il nome file corretto dello script corrente, anche quando viene chiamato dall'interno di un altro script.È particolarmente utile durante l'utilizzo subprocess.

import sys,os

filename = sys.argv[0]

da lì puoi ottenere il percorso completo dello script con:

>>> os.path.abspath(filename)
'/foo/bar/script.py'

Inoltre, semplifica la navigazione tra le cartelle semplicemente aggiungendo /.. tutte le volte che vuoi salire "su" nella gerarchia delle directory.

Per ottenere il cwd:

>>> os.path.abspath(filename+"/..")
'/foo/bar'

Per il percorso principale:

>>> os.path.abspath(filename+"/../..")
'/foo'

Combinando "/.." con altri nomi di file, puoi accedere a qualsiasi file nel sistema.

filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top