私は次のようなディレクトリ内のファイルを反復しようとしていました:
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'
では、ここで何が問題になっていますか?
なぜなら - 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
ブロックが自動的に処理します)。
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()
# ...