Til að fá staðsetningu (slóð) handritaskrár í gangi í Python, notaðu __file__. Þetta er gagnlegt til að hlaða öðrum skrám út frá staðsetningu keyrslunnar.
Allt að Python 3.8, __file__ skilar slóðinni sem tilgreind var þegar python stjórnin er framkvæmd (eða python3 stjórn í sumum umhverfum). Ef afstæð slóð er tilgreind er hlutfallslegri leið skilað; ef alger slóð er tilgreind er algerri leið skilað.
Í Python 3.9 og síðar er algerri slóð skilað óháð slóðinni sem tilgreind var á keyrslutíma.
Eftirfarandi innihald er útskýrt.
os.getcwd()
,__file__
- Fáðu skráarnafnið og skráarnafnið á skránni sem er að keyra núna.
- Fáðu algera slóð skráarinnar sem er keyrð.
- Lesar aðrar skrár byggðar á staðsetningu núverandi skrár.
- Færðu núverandi möppu í möppu skráarinnar sem er keyrð.
- Sama vinnslu er hægt að gera óháð núverandi möppu á keyrslutíma.
Sjá eftirfarandi grein fyrir upplýsingar um hvernig á að fá og breyta núverandi skrá (vinnuskrá).
- Tengdar greinar:Fáðu og breyttu (færðu) núverandi möppu í Python
Athugið að __file__ er ekki hægt að nota í Jupyter Notebook (.ipynb).
Mappan þar sem .ipynb er staðsett verður keyrð sem núverandi skráasafn, óháð möppunni þar sem Jupyter Notebook er ræst.
Það er hægt að nota os.chdir () í kóðanum til að breyta núverandi möppu.
- os.getcwd () og __file__.
- Fáðu skráarnafnið og skráarnafnið á skránni sem er að keyra núna.
- Fáðu algera slóð skráarinnar sem er keyrð.
- Lesar aðrar skrár byggðar á staðsetningu núverandi skrár.
- Færðu núverandi möppu í möppu skráarinnar sem er keyrð.
- Sama vinnslu er hægt að gera óháð núverandi möppu á keyrslutíma.
os.getcwd () og __file__.
Í Windows geturðu notað dir skipunina í staðinn fyrir pwd til að athuga núverandi skrá.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
Búðu til Python forskriftarskrá (file_path.py) með eftirfarandi innihaldi á neðra stigi (data \ src).
import os
print('getcwd: ', os.getcwd())
print('__file__: ', __file__)
Keyra python skipunina (eða python3 stjórn í sumum umhverfum) sem tilgreinir slóðina að forskriftarskránni.
python3 data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: data/src/file_path.py
Hægt er að fá algera slóð að núverandi skrá með os.getcwd (). Þú getur líka notað __file__ til að fá slóðina sem python3 stjórnin tilgreinir.
Allt að Python 3.8 mun __file__ innihalda slóðina sem tilgreind er í python (eða python3) skipuninni. Í dæminu hér að ofan er hlutfallslegu leiðinni skilað vegna þess að hún er afstæð, en algerri leiðinni er skilað ef hún er alger.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
python3 /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
Python 3.9 og síðar skilar algerri slóð í __file__, óháð slóðinni sem tilgreind er í python (eða python3) skipuninni.
Í eftirfarandi dæmi munum við bæta kóðanum við sömu forskriftarskrá (file_path.py) í Python 3.7 og keyra hann miðað við ofangreinda möppu.
Í Python 3.7 er alger slóð notuð. Niðurstöðurnar eru sýndar í lok þessa kafla.
Fáðu skráarnafnið og skráarnafnið á skránni sem er að keyra núna.
Til að fá skráarnafn og möppuheiti hlaupandi skráar skaltu nota eftirfarandi aðgerð í os.path mát stöðluðu bókasafnsins.
os.path.basename()
os.path.dirname()
print('basename: ', os.path.basename(__file__))
print('dirname: ', os.path.dirname(__file__))
Niðurstaða framkvæmdar.
# basename: file_path.py
# dirname: data/src
Fáðu algera slóð skráarinnar sem er keyrð.
Ef afstæð slóð fæst með __file__, er hægt að breyta henni í algera slóð með os.path.abspath (). Möppur er einnig hægt að fá sem algerar leiðir.
print('abspath: ', os.path.abspath(__file__))
print('abs dirname: ', os.path.dirname(os.path.abspath(__file__)))
Niðurstaða framkvæmdar.
# abspath: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# abs dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
Ef alger slóð er tilgreind í os.path.abspath () verður henni skilað eins og það er. Þess vegna, ef __file__ er alger slóð, mun eftirfarandi ekki valda villu.
os.path.abspath(__file__)
Lesar aðrar skrár byggðar á staðsetningu núverandi skrár.
Ef þú vilt lesa aðrar skrár út frá staðsetningu (slóð) skrárinnar sem er keyrð skaltu tengja eftirfarandi tvær skrár með því að nota os.path.join ().
- Skrá yfir skrána sem er keyrð
- Hlutfallsleg slóð að skránni sem á að lesa úr hlaupandi skrá.
Ef þú vilt lesa skrá í sömu möppu og skráin sem þú ert að keyra skaltu bara tengja saman skráarnafnið.
print('[set target path 1]')
target_path_1 = os.path.join(os.path.dirname(__file__), 'target_1.txt')
print('target_path_1: ', target_path_1)
print('read target file:')
with open(target_path_1) as f:
print(f.read())
Niðurstaða framkvæmdar.
# [set target path 1]
# target_path_1: data/src/target_1.txt
# read target file:
# !! This is "target_1.txt" !!
Efra stigið er táknað með „. \“. Þú getur látið það vera eins og það er, en þú getur notað os.path.normpath () til að staðla slóðina og fjarlægja auka „. \“ Og aðra stafi.
print('[set target path 2]')
target_path_2 = os.path.join(os.path.dirname(__file__), '../dst/target_2.txt')
print('target_path_2: ', target_path_2)
print('normalize : ', os.path.normpath(target_path_2))
print('read target file:')
with open(target_path_2) as f:
print(f.read())
Niðurstaða framkvæmdar.
# [set target path 2]
# target_path_2: data/src/../dst/target_2.txt
# normalize : data/dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
Færðu núverandi möppu í möppu skráarinnar sem er keyrð.
Notaðu os.chdir () til að færa núverandi skrá í möppu skrárinnar sem er keyrð í handritinu.
- Tengdar greinar:Fáðu og breyttu (færðu) núverandi möppu í Python
Þú getur séð að það er flutt af os.getcwd ().
print('[change directory]')
os.chdir(os.path.dirname(os.path.abspath(__file__)))
print('getcwd: ', os.getcwd())
Niðurstaða framkvæmdar.
# [change directory]
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
Þegar núverandi skrá hefur verið flutt þarf ekki að tengja hana við möppu skrárinnar sem er í gangi þegar skráin er lesin. Þú getur bara tilgreint slóðina miðað við skráasafnið í gangi skráarinnar.
print('[set target path 1 (after chdir)]')
target_path_1 = 'target_1.txt'
print('target_path_1: ', target_path_1)
print('read target file:')
with open(target_path_1) as f:
print(f.read())
print()
print('[set target path 2 (after chdir)]')
target_path_2 = '../dst/target_2.txt'
print('target_path_2: ', target_path_2)
print('read target file:')
with open(target_path_2) as f:
print(f.read())
Niðurstaða framkvæmdar.
# [set target path 1 (after chdir)]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2 (after chdir)]
# target_path_2: ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
Sama vinnslu er hægt að gera óháð núverandi möppu á keyrslutíma.
Eins og við höfum sýnt er hægt að hlaða skrám út frá staðsetningu forskriftarskrárinnar, óháð núverandi möppu við keyrslutíma, með því að nota eina af eftirfarandi aðferðum.
- Tengdu saman möppu skrárinnar sem er í gangi og hlutfallslega slóð að skránni sem á að lesa úr hlaupandi skrá með því að nota os.path.join ().
- Færðu núverandi möppu í möppu skráarinnar sem er keyrð.
Það er auðveldara að færa núverandi skrá, en auðvitað, ef þú vilt lesa eða skrifa fleiri skrár eftir það, þá þarftu að taka tillit til þess að núverandi skrá hefur verið flutt.
Niðurstöður fyrri dæma eru dregnar saman hér að neðan.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
python3 data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: data/src/file_path.py
# basename: file_path.py
# dirname: data/src
# abspath: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# abs dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1]
# target_path_1: data/src/target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2]
# target_path_2: data/src/../dst/target_2.txt
# normalize : data/dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
#
# [change directory]
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1 (after chdir)]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2 (after chdir)]
# target_path_2: ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
Niðurstaðan af því að tilgreina algera leið er sem hér segir.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
python3 /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# basename: file_path.py
# dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
# abspath: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# abs dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1]
# target_path_1: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2]
# target_path_2: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/../dst/target_2.txt
# normalize : /Users/mbp/Documents/my-project/python-snippets/notebook/data/dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
#
# [change directory]
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1 (after chdir)]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2 (after chdir)]
# target_path_2: ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
Niðurstaðan af því að færa núverandi skrá í flugstöðina og keyra sömu forskriftarskrá er sýnd hér að neðan. Þú getur séð að hægt er að lesa sömu skrána jafnvel þótt hún sé keyrð frá öðrum stað.
cd data/src
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
python3 file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
# __file__: file_path.py
# basename: file_path.py
# dirname:
# abspath: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# abs dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2]
# target_path_2: ../dst/target_2.txt
# normalize : ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
#
# [change directory]
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1 (after chdir)]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2 (after chdir)]
# target_path_2: ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!