Python open() necesită calea completă (Programare, Python, Fișier, Visual Studio Code, Python 3.4)

Arun a intrebat.
a intrebat.

Scriu un script pentru a citi un fișier csv. Fișierul csv și scriptul se află în același director. Dar când am încercat să deschid fișierul îmi dă FileNotFoundError: [Errno 2] No such file or directory: 'zipcodes.csv'. Codul pe care l-am folosit pentru a citi fișierul este

with open('zipcodes.csv', 'r') as zipcode_file:
    reader = csv.DictReader(zipcode_file)

Dacă dau calea completă a fișierului, acesta va funcționa. De ce open() necesită calea completă a fișierului?

Comentarii

  • Ce înseamnă os.getcwd()? Dacă nu este același director cu cel care conține fișierul, acesta este motivul pentru care calea relativă nu funcționează. –  > Por Dan D..
  • Pentru că rulați scriptul python în timp ce vă aflați într-un alt director și este directorul curent. –  > Por John Gordon.
  • Rulez codul în Visual Studio code debugger. –  > Por Arun.
  • …și care este directorul de lucru curent? –  > Por tdelaney.
5 răspunsuri
Chiheb Nexus

De la documentație:

open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

file este un obiect de tip „path-like” care indică numele de cale (absolut sau relativ la directorul de lucru curent) al fișierului care urmează să fie deschis sau un descriptor de fișier întreg al fișierului care urmează să fie înfășurat.

Astfel, dacă fișierul pe care doriți să îl deschideți nu se află în folderul curent al scriptului în curs de execuție, puteți utiliza o cale absolută sau puteți obține directorul de lucru sau/și calea absolută utilizând:

import os
# Look to the path of your current working directory
working_directory = os.getcwd()
# Or: file_path = os.path.join(working_directory, 'my_file.py')
file_path = working_directory + 'my_file.py'

Sau, puteți prelua calea absolută în timp ce rulați scriptul, utilizând:

import os
# Look for your absolute directory path
absolute_path = os.path.dirname(os.path.abspath(__file__))
# Or: file_path = os.path.join(absolute_path, 'folder', 'my_file.py')
file_path = absolute_path + '/folder/my_file.py'

Arun

Am identificat problema. Mi-am rulat codul pe depanatorul Visual Studio Code. Directorul rădăcină pe care l-am deschis era deasupra nivelului fișierului meu. Când am deschis același director, a funcționat.

Jaclyn Horton

Am avut probleme considerabile la deschiderea fișierelor prin Python dacă nu folosesc calea absolută sau nu construiesc calea folosind os.path. Chiar dacă fișierul se află în același director ca și fișierul Python, rezultatul este același. Am folosit soluția lui Chiheb și bineînțeles că a funcționat din nou (Mulțumesc Chiheb). Mă întreb dacă nu cumva se întâmplă ceva cu Python. Folosesc VS Code, dar totuși asta nu ar trebui să conteze, după părerea mea, dacă este dată o cale exactă.

Codul pentru situația mea actuală care a funcționat folosind soluția de mai sus:

Sitka_highs.py

import os
import csv

absolute_path = os.path.dirname(os.path.abspath(__file__))

filename = absolute_path + '/data/sitka_weather_07-2018_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)

Hasitha

Am folosit metoda de mai jos și a funcționat bine pentru mine.

FILE_PATH = os.path.dirname(os.path.realpath(__file__))
config = ConfigParser.ConfigParser()
config.readfp(open(FILE_PATH+'/conf.properties'))

Vexen Crabtree

Nu cred că Python știe ce dir să folosească… pentru a începe cu calea curentă a fișierului .py curent, încercați:

mypath = os.path.dirname(os.path.abspath(__file__))
with open(mypath+'/zipcodes.csv', 'r') as zipcode_file:
    reader = csv.DictReader(zipcode_file)