Stel dat Python-code wordt uitgevoerd in niet bekend in de directory van de volgende Windows, zegt ‘hoofd’ en waar code is geïnstalleerd wanneer het wordt uitgevoerd wanneer deze wordt uitgevoerd om toegang te krijgen tot de directory ‘Main / 2091 / Data.txt’.
Hoe moet ik open (locatie) gebruiken? Wat moet locatie zijn?
EDIT:
Ik vond dat hieronder een eenvoudige code werkt .. Heeft het een nadelen?
file="\2091\sample.txt"
path=os.getcwd()+file
fp=open(path,'r+');
Antwoord 1, Autoriteit 100%
Met dit type ding moet je voorzichtig zijn met wat je werkelijke werkmap is. U mag bijvoorbeeld niet het script uit de map uitvoeren waarin het bestand is. In dit geval kunt u niet alleen een relatief pad gebruiken.
Als u zeker weet dat het gewenste bestand zich in een subdirectory bevindt, onder waar het script zich bevindt, kunt u __file__
gebruiken om u hier te helpen. __file__
is het volledige pad naar waar het meningsscript wordt uitgevoerd, bevindt zich.
, zodat u met zoiets kunt viemen:
import os
script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)
Antwoord 2, Autoriteit 19%
Deze code werkt prima:
import os
def readFile(filename):
filehandle = open(filename)
print filehandle.read()
filehandle.close()
fileDir = os.path.dirname(os.path.realpath('__file__'))
print fileDir
#For accessing the file in the same folder
filename = "same.txt"
readFile(filename)
#For accessing the file in a folder contained in the current folder
filename = os.path.join(fileDir, 'Folder1.1/same.txt')
readFile(filename)
#For accessing the file in the parent folder of the current folder
filename = os.path.join(fileDir, '../same.txt')
readFile(filename)
#For accessing the file inside a sibling folder.
filename = os.path.join(fileDir, '../Folder2/same.txt')
filename = os.path.abspath(os.path.realpath(filename))
print filename
readFile(filename)
Antwoord 3, autoriteit 13%
Ik heb een account gemaakt zodat ik een discrepantie kan ophelderen die ik denk te hebben gevonden in de oorspronkelijke reactie van Russ.
Ter referentie, zijn oorspronkelijke antwoord was:
import os
script_dir = os.path.dirname(__file__)
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)
Dit is een geweldig antwoord omdat het dynamisch probeert een absoluut systeempad naar het gewenste bestand te creëren.
Cory Mawhorter merkte op dat __file__
een relatief pad is (het staat ook op mijn systeem) en stelde voor om os.path.abspath(__file__)
te gebruiken. os.path.abspath
retourneert echter het absolute pad van uw huidige script (d.w.z. /path/to/dir/foobar.py
)
Om deze methode te gebruiken (en hoe ik het uiteindelijk heb laten werken), moet je de scriptnaam aan het einde van het pad verwijderen:
import os
script_path = os.path.abspath(__file__) # i.e. /path/to/dir/foobar.py
script_dir = os.path.split(script_path)[0] #i.e. /path/to/dir/
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)
Het resulterende abs_file_path (in dit voorbeeld) wordt: /path/to/dir/2091/data.txt
Antwoord 4, autoriteit 9%
Ik besteed veel tijd aan het ontdekken waarom mijn code mijn bestand met Python 3 op het Windows-systeem niet kon vinden. Dus ik voegde toe. voor / en alles werkte prima:
import os
script_dir = os.path.dirname(__file__)
file_path = os.path.join(script_dir, './output03.txt')
print(file_path)
fptr = open(file_path, 'w')
Antwoord 5, autoriteit 9%
Het hangt af van het besturingssysteem dat u gebruikt. Als u een oplossing wilt die compatibel is met zowel Windows als *nix, zoiets als:
from os import path
file_path = path.relpath("2091/data.txt")
with open(file_path) as f:
<do stuff>
zou goed moeten werken.
De module path
kan een pad formatteren voor welk besturingssysteem dan ook. Ook behandelt python relatieve paden prima, zolang je de juiste rechten hebt.
Bewerken:
Zoals door Kindall in de opmerkingen vermeld, kan python sowieso converteren tussen Unix-stijl en Windows-stijl paden, dus een nog eenvoudigere code zal werken:
with open("2091/data/txt") as f:
<do stuff>
Dat gezegd hebbende, de path
-moduleheeft nog een aantal handige functies.
Antwoord 6, autoriteit 4%
Probeer dit:
from pathlib import Path
data_folder = Path("/relative/path")
file_to_open = data_folder / "file.pdf"
f = open(file_to_open)
print(f.read())
Python 3.4 introduceerde een nieuwe standaardbibliotheek voor het omgaan met bestanden en paden, genaamd pathlib. Het werkt voor mij!
Antwoord 7, autoriteit 3%
Code:
import os
script_path = os.path.abspath(__file__)
path_list = script_path.split(os.sep)
script_directory = path_list[0:len(path_list)-1]
rel_path = "main/2091/data.txt"
path = "/".join(script_directory) + "/" + rel_path
Uitleg:
Bibliotheek importeren:
import os
Gebruik __file__
om het pad van het huidige script te bereiken:
script_path = os.path.abspath(__file__)
Scheidt het scriptpad in meerdere items:
path_list = script_path.split(os.sep)
Verwijder het laatste item in de lijst (het eigenlijke scriptbestand):
script_directory = path_list[0:len(path_list)-1]
Voeg het pad van het relatieve bestand toe:
rel_path = "main/2091/data.txt
Voeg de lijstitems toe en voeg het relatieve padbestand toe:
path = "/".join(script_directory) + "/" + rel_path
Nu ben je klaar om te doen wat je wilt met het bestand, zoals bijvoorbeeld:
file = open(path)
Antwoord 8
import os
def file_path(relative_path):
dir = os.path.dirname(os.path.abspath(__file__))
split_path = relative_path.split("/")
new_path = os.path.join(dir, *split_path)
return new_path
with open(file_path("2091/data.txt"), "w") as f:
f.write("Powerful you have become.")
Antwoord 9
Python geeft de bestandsnaam die je eraan geeft gewoon door aan het besturingssysteem, dat het opent. Als je besturingssysteem relatieve paden ondersteunt, zoals main/2091/data.txt
(hint: dat doet het), dan werkt dat prima.
Misschien vindt u dat de gemakkelijkste manier om een vraag als deze te beantwoorden, is door het te proberen en te kijken wat er gebeurt.
Antwoord 10
Ik weet niet zeker of dit overal werkt.
Ik gebruik ipython in ubuntu.
Als u het bestand in de submap van de huidige map wilt lezen:
/current-folder/sub-directory/data.csv
je script staat in de huidige map
probeer gewoon dit:
import pandas as pd
path = './sub-directory/data.csv'
pd.read_csv(path)
Antwoord 11
Als het bestand zich in uw bovenliggende map bevindt, bijv. volger.txt, je kunt gewoon open('../follower.txt', 'r').read()
gebruiken
Antwoord 12
Toen ik een beginner was, vond ik deze beschrijvingen een beetje intimiderend. Zoals in het begin zou ik het proberen
For Windows
f= open('C:\Users\chidu\Desktop\Skipper New\Special_Note.txt','w+')
print(f)
en dit zou een syntax error
opleveren. Ik gebruikte vaak verward raken. Na wat surfen op google. gevonden waarom de fout is opgetreden. Dit schrijven voor beginners
Om het pad in Unicode te kunnen lezen, hoeft u alleen maar een \
toe te voegen bij het starten van het bestandspad
f= open('C:\\Users\chidu\Desktop\Skipper New\Special_Note.txt','w+')
print(f)
En nu werkt het, voeg gewoon \
toe voordat je de directory start.
Antwoord 13
Krijg het pad van de bovenliggende map en os.join
tot het einde van je relatieve bestanden.
# get parent folder with `os.path`
import os.path
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# get parent folder with `pathlib`'s Path
from pathlib import Path
BASE_DIR = Path(__file__).absolute().parent
# path to files relative to parent
file = "config.yaml"
final_path = os.path.join(BASE_DIR, file) # os.path
final_path = BASE_DIR / file # pathlib