webdevqa.jp.net

Python open()はIOErrorを出力します:Errno 2そのようなファイルまたはディレクトリはありません

何らかの理由で、私のコードは単純なファイルを開くことができません。

これはコードです:

file1 = open('recentlyUpdated.yaml')

エラーは次のとおりです。

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • 当然、これがファイルの正しい名前であることを確認しました。
  • open()にファイルへのフルパスを指定して、ファイル内を移動しようとしましたが、いずれも機能していないようです。
48
Santiago
  • ファイルが存在することを確認します。os.listdir()を使用して、現在の作業ディレクトリ内のファイルのリストを表示します
  • os.getcwd()を使用していると思われるディレクトリにいることを確認してください(IDEからコードを起動する場合、別のディレクトリにいる可能性があります)
  • その後、次のいずれかを実行できます。
    • os.chdir(dir)dirを呼び出して、ファイルが置かれているフォルダーを指定し、実行中のように名前だけでファイルを開きます。
    • open呼び出しでファイルへの絶対パスを指定します。
  • パスでバックスラッシュが使用されている場合は、dir = r'C:\Python32' のように生の文字列を使用することを忘れないでください
    • Raw-stringを使用しない場合は、バックスラッシュをすべてエスケープする必要があります:'C:\\User\\Bob\\...'
    • スラッシュはWindows 'C:/Python32'でも機能し、エスケープする必要はありません。

Pythonがファイルを見つける方法を明確にしましょう:

  • 絶対パスは、コンピューターのルートディレクトリで始まるパスです。たとえば、Windowsの場合は「C:\ Python\scripts ..」です。
  • 相対パスは、コンピューターのルートディレクトリで始まらないパスであり、代わりにworking directoryと呼ばれるものに対する相対パスです。 os.getcwd()を呼び出すことにより、Pythonの現在の作業ディレクトリを表示できます。

open('sortedLists.yaml')を実行しようとすると、Pythonは相対パスを渡していることを確認するため、現在の作業ディレクトリ内のファイルを検索します。 os.chdirを呼び出すと、現在の作業ディレクトリが変更されます。

例:file.txtC:\Folderにあるとします。

それを開くには、次のことができます:

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

または

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

ファイルは存在していても、パスが異なる場合があります。ファイルの絶対パスを書いてみてください。

os.listdir()関数を試して、少なくともpythonがファイルを参照していることを確認してください。

このようにしてみてください:

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

ほとんどの場合、問題は 相対ファイルパス を使用してファイルを開きますが、 現在の作業ディレクトリ があなたが思っている通りに設定されていないことです。

相対パスはpythonスクリプトの場所に相対的であるという一般的な誤解ですが、これは正しくありません。相対ファイルパスは常に現在の作業ディレクトリに相対的であり、現在の作業ディレクトリはpythonスクリプトの場所である必要はありません。

次の3つのオプションがあります。

  • 絶対パスを使用してファイルを開きます:

    file = open(r'C:\path\to\your\file.yaml')
    
  • pythonスクリプトに関連するファイルへのパスを生成します:

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

    (参照: 現在実行中のファイルのパスと名前を取得するにはどうすればよいですか?

  • ファイルを開く前に現在の作業ディレクトリを変更します:

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

「ファイルが見つかりません」というエラーを引き起こす可能性のある他の一般的な間違いには次のものがあります。

  • ファイルパスで誤ってエスケープシーケンスを使用する:

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

    この間違いを避けるため、ファイルパスには raw string literals を使用することを忘れないでください。

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

    (参照: PythonのWindowsパス

  • Windowsがファイル拡張子を表示しないことを忘れる:

    Windowsには既知のファイル拡張子が表示されないため、ファイルの名前がfile.yamlと思われる場合、実際にはfile.yaml.yamlという名前になります。ファイルの拡張子を再確認してください。

4
Aran-Fey

おそらく、「file1」を閉じました。
「w」フラグを使用するだけで、新しいファイルが作成されます。

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

modeは、ファイルを開くモードを指定するオプションの文字列です。デフォルトは 'r'です。これは、テキストモードで読み取り用に開くことを意味します。他の一般的な値は、書き込み用の 'w'です(ファイルが既に存在する場合は切り捨てます)...

https://docs.python.org/3/library/functions.html?highlight=open#open も参照してください)

0
Maxim Temny