Python open() geeft FileNotFoundError/IOError: Errno 2 Geen dergelijk bestand of map

Om de een of andere reden heeft mijn code problemen met het openen van een eenvoudig bestand:

Dit is de code:

file1 = open('recentlyUpdated.yaml')

En de fout is:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • Natuurlijk heb ik gecontroleerd of dit de juiste naam van het bestand is.
  • Ik heb geprobeerd door het bestand te bladeren, waarbij open() het volledige pad naar het bestand wordt gegeven en niets lijkt te werken.

Antwoord 1, autoriteit 100%

  • Zorg ervoor dat het bestand bestaat: gebruik os.listdir() om de lijst met bestanden in de huidige werkmap te zien
  • Zorg ervoor dat u zich in de directory bevindt waarin u denkt te zitten met os.getcwd() (als u uw code start vanuit een IDE, bevindt u zich mogelijk in een andere directory)
  • Je kunt dan:
    • Bel os.chdir(dir), waarbij dir de map is waar het bestand zich bevindt
      gevonden, open vervolgens het bestand met alleen de naam zoals u aan het doen was.
    • Geef een absoluut pad naar het bestand op in uw open-aanroep.
  • Vergeet niet om een ​​onbewerkte tekenreeks te gebruiken als je pad backslashes gebruikt, zoals
    dus: dir = r'C:\Python32'

    • Als je geen raw-string gebruikt, moet je elke backslash escapen: 'C:\\User\\Bob\\...'
    • Forward-slashes werken ook op Windows 'C:/Python32' en hoeven niet te worden escaped.

Laat me verduidelijken hoe Python bestanden vindt:

  • Een absoluut pad is een pad dat begint met de hoofdmap van uw computer, bijvoorbeeld ‘C:\Python\scripts..’ als u Windows gebruikt.
  • Een relatief pad is een pad dat niet begint met de hoofdmap van je computer, maar relatief is aan iets dat de working directory wordt genoemd. Je kunt de huidige werkdirectory van Python bekijken door os.getcwd() aan te roepen.

Als je open('sortedLists.yaml') probeert te doen, zal Python zien dat je het een relatief pad doorgeeft, dus het zal zoeken naar het bestand in de huidige werkmap. Als u os.chdir aanroept, wordt de huidige werkmap gewijzigd.

Voorbeeld: laten we zeggen dat file.txt wordt gevonden in C:\Folder.

Om het te openen, kunt u het volgende doen:

os.chdir(r'C:\Folder')
open('file.txt') #relative path, looks inside the current working directory

of

open(r'C:\Folder\file.txt') #full path

Antwoord 2, autoriteit 17%

Hoogstwaarschijnlijk is het probleem dat u een relatief bestandspad om het bestand te openen, maar de huidige werkmap is niet ingesteld op wat u denkt het is.

Het is een algemene misvatting dat relatieve paden relatief zijn ten opzichte van de locatie van het pythonscript, maar dit is niet waar. Relatieve bestandspaden zijn altijd relatief ten opzichte van de huidige werkmap en de huidige werkmap hoeft niet de locatie van uw python-script te zijn.

Je hebt drie opties:

  • Gebruik een absoluut pad om het bestand te openen:

    file = open(r'C:\path\to\your\file.yaml')
    
  • Genereer het pad naar het bestand ten opzichte van uw python-script:

    from pathlib import Path
    script_location = Path(__file__).absolute().parent
    file_location = script_location / 'file.yaml'
    file = file_location.open()
    

    (Zie ook: Hoe kom ik aan het pad en de naam van het bestand dat momenteel wordt uitgevoerd?)

  • Wijzig de huidige werkmap voordat u het bestand opent:

    import os
    os.chdir(r'C:\path\to\your\file')
    file = open('file.yaml')
    

Andere veelvoorkomende fouten die een “bestand niet gevonden”-fout kunnen veroorzaken, zijn onder meer:

  • Per ongeluk gebruik van escape-reeksen in een bestandspad:

    path = 'C:\Users\newton\file.yaml'
    # Incorrect! The '\n' in 'Users\newton' is a line break character!
    

    Om deze fout te voorkomen, vergeet niet om raw letterlijke tekenreeksen voor bestandspaden:

    path = r'C:\Users\newton\file.yaml'
    # Correct!
    

    (Zie ook: Windows-pad in Python)

  • Vergeten dat Windows geen bestandsextensies weergeeft:

    Omdat Windows geen bekende bestandsextensies weergeeft, wordt het soms, als je denkt dat je bestand file.yaml heet, in werkelijkheid file.yaml.yaml genoemd. Controleer nogmaals de extensie van uw bestand.


Antwoord 3, autoriteit 6%

Het bestand kan bestaan, maar kan een ander pad hebben. Probeer het absolute pad voor het bestand te schrijven.

Probeer de functie os.listdir() om te controleren of python het bestand ten minste ziet.

Probeer het als volgt:

file1 = open(r'Drive:\Dir\recentlyUpdated.yaml')

Antwoord 4, autoriteit 2%

Mogelijk heb je ‘file1’ gesloten.
Gebruik gewoon de vlag ‘w’, die een nieuw bestand maakt:

file1 = open('recentlyUpdated.yaml', 'w')

modus is een optionele tekenreeks die de modus aangeeft waarin het bestand
is geopend. Het staat standaard op ‘r’, wat betekent open voor lezen in tekst
modus. Andere veel voorkomende waarden zijn ‘w’ voor schrijven (het bestand afkappen als
het bestaat al)…

(zie ook https://docs.python. org/3/library/functions.html?highlight=open#open)


Antwoord 5

Als VSCode is, zie de werkruimte. Als u zich in een andere werkruimte bevindt, kan deze fout toenemen


Antwoord 6

Controleer het pad dat is genoemd, of het absoluut of relatief is.

Als het zoiets is als–>/folder/subfolder/file –>Computer zoekt naar een map in de hoofdmap.

Als het iets is als–> ./folder/subfolder/file –> Computer zoekt naar map in huidige werkmap.


Antwoord 7

Ik had hetzelfde probleem. Mijn probleem ging over de bestandsnaam. Ik heb de bestandsnaam gewijzigd van ASVspoof2017_train.trn.txt in ASV.txt en de fout is verwijderd!

LEAVE A REPLY

Please enter your comment!
Please enter your name here

19 − twelve =

Other episodes