it-swarm.com.de

Python-Fehler: FileNotFoundError: [Errno 2] Keine Datei oder Verzeichnis

Ich versuche, die Datei aus einem Ordner zu öffnen und zu lesen, aber sie findet sie nicht. Ich benutze Python3 

Hier ist mein Code: 

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'

2
Mayur Potdar

Sie geben nicht den vollständigen Pfad zu einer Datei an open(), sondern nur ihren Namen.

Sie müssten entweder os.path.join() korrekten Verzeichnispfad dazu oder os.chdir() für das Verzeichnis angeben, in dem sich die Dateien befinden.

Aus Ihrem Code kann ich jedoch ableiten, dass Sie vergessen, die file_array-Liste zu ändern. Um dies zu beheben, ändern Sie die erste Schleife folgendermaßen:

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

Denken Sie auch daran, dass os.path.abspath() den vollständigen Pfad zu einer Datei nicht anhand des Namens ermitteln kann.


Lass mich es wiederholen.

Diese Zeile in Ihrem Code:

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

ist falsch. Sie erhalten keine Liste mit korrekten absoluten Pfaden. Was Sie hätten tun sollen, ist:

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

Sie verwenden einen relativen Pfad, in dem Sie einen absoluten Pfad verwenden sollten. Es ist eine gute Idee, os.path für die Arbeit mit Dateipfaden zu verwenden. Einfache Lösung für Ihren Code ist:

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

Beachten Sie, dass Ihr Code einige andere Probleme aufweist:

  1. In Python können Sie for thing in things ausführen. Sie haben for thing in range(len(things)) getan, es ist viel weniger lesbar und unnötig.

  2. Sie sollten Kontextmanager verwenden, wenn Sie eine Datei öffnen. Lesen Sie mehr hier .

0
jjj