Ошибка Python: FileNotFoundError: [Errno 2] Нет такого файла или каталога - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь открыть файл из папки и прочитать его, но он не находит его.Я использую 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'

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вы используете относительный путь, где вы должны использовать абсолютный. Рекомендуется использовать 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 голосов
/ 25 апреля 2018

Вы не указываете полный путь к файлу 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...