web-dev-qa-db-ja.com

Python error:FileNotFoundError:[Errno 2] No such file or directory

フォルダからファイルを開いて読み取ろうとしていますが、見つかりません。私はPython3を使用しています

これが私のコードです:

import os
import glob

prefix_path = "C:/Users/mpotd/Documents/GitHub/Python-Sample-                
codes/Mayur_Python_code/Question/wx_data/"
target_path = open('MissingPrcpData.txt', 'w')
file_array = [os.path.abspath(f) for f in os.listdir(prefix_path) if 
f.endswith('.txt')]
file_array.sort() # file is sorted list

for f_obj in range(len(file_array)):
     file = os.path.abspath(file_array[f_obj])
     join_file = os.path.join(prefix_path, file) #whole file path

for filename in file_array:
     log = open(filename, 'r')#<---- Error is here

Error: FileNotFoundError: [Errno 2] No such file or directory: 'USC00110072.txt'

3
Mayur Potdar

open()にファイルへのフルパスを与えるのではなく、ファイルの名前だけを与えます。

os.path.join()への正しいディレクトリパス、またはファイルが存在するディレクトリへのos.chdir()のいずれかを行う必要があります。

あなたのコードから推測できますが、_file_array_リストの変更を忘れていることになります。これを修正するには、最初のループを次のように変更します。

_file_array = [os.path.join(prefix_path, name) for name in file_array]
_

また、os.path.abspath()は、ファイルの名前だけではファイルへの完全パスを推定できないことに注意してください。


繰り返します。

コードのこの行:

_file_array = [os.path.abspath(f) for f in os.listdir(prefix_path) if f.endswith('.txt')]
_

間違っている。正しい絶対パスのリストは表示されません。あなたがしなければならないのは:

_import os
import glob

prefix_path = ("C:/Users/mpotd/Documents/GitHub/Python-Sample-"    
               "codes/Mayur_Python_code/Question/wx_data/")
target_path = open('MissingPrcpData.txt', 'w')
file_array = [f for f in os.listdir(prefix_path) if f.endswith('.txt')]
file_array.sort() # file is sorted list

file_array = [os.path.join(prefix_path, name) for name in file_array]

for filename in file_array:
     log = open(filename, 'r')
_
2

絶対パスを使用する必要がある場所で相対パスを使用しています。 _os.path_を使用してファイルパスを操作することをお勧めします。コードの簡単な修正は次のとおりです。

_prefix = os.path.abspath(prefix_path) 
file_list = [os.path.join(prefix, f) for f in os.listdir(prefix) if f.endswith('.txt')]
_

コードには他にもいくつかの問題があることに注意してください。

  1. pythonあなたは_for thing in things_を実行できます。あなたはfor thing in range(len(things))を実行しました。

  2. ファイルを開くときは、コンテキストマネージャを使用する必要があります。続きを読む こちら

0
jjj