web-dev-qa-db-ja.com

Python os.listdirによって返されたファイル名にFileNotFoundErrorを与える

私は次のようなディレクトリ内のファイルを反復しようとしていました:

import os

path = r'E:/somedir'

for filename in os.listdir(path):
    f = open(filename, 'r')
    ... # process the file

しかし、ファイルが存在していても、PythonはFileNotFoundErrorをスローしていました。

Traceback (most recent call last):
  File "E:/ADMTM/TestT.py", line 6, in <module>
    f = open(filename, 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'foo.txt'

では、ここで何が問題になっていますか?

7
Aarushi Mishra

なぜなら - os.listdir はファイルへのフルパスを返しません。ファイル名の部分のみを返します。あれは 'foo.txt'、開いているときは'E:/somedir/foo.txt'ファイルが現在のディレクトリに存在しないため。

使用する - os.path.join ディレクトリをファイル名の前に追加するには:

path = r'E:/somedir'

for filename in os.listdir(path):
    with open(os.path.join(path, filename)) as f:
        ... # process the file

(また、ファイルを閉じていません。withブロックが自動的に処理します)。

5
Antti Haapala

os.listdir(directory)directory内のファイルnamesのリストを返します。したがって、directoryが現在の作業ディレクトリでない限り、適切な絶対パスを取得するには、これらのファイル名を実際のディレクトリと結合する必要があります。

for filename in os.listdir(path):
    filepath = os.path.join(path, filename)
    f = open(filepath,'r')
    raw = f.read()
    # ...
1
Lukas Graf