Файл не найден в Python, хотя файл существует - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь загрузить простой текстовый файл с массивом чисел в Python.MWE имеет значение

import numpy as np

BASE_FOLDER = 'C:\\path\\'
BASE_NAME = 'DATA.txt'
fname = BASE_FOLDER + BASE_NAME 

data = np.loadtxt(fname)

Однако при запуске возникает ошибка:

OSError: C:\path\DATA.txt not found.

Я использую VSCode, поэтому в окне отладки ссылка на путь щелкается.И, конечно, если я щелкну по нему, файл откроется нормально, поэтому это говорит о том, что путь правильный.

Кроме того, если я сделаю print(fname), VSCode также даст мне правильный путь.

Есть ли что-то, что я пропускаю?

РЕДАКТИРОВАТЬ

Согласно вашим (очень полезным для дальнейшего использования) комментариям, я изменил свой код, используя модуль os и rawстроки:

BASE_FOLDER = r'C:\path_to_folder'
BASE_NAME = r'filename_DATA.txt'
fname = os.path.join(BASE_FOLDER, BASE_NAME) 

Все еще приводит к ошибке.

Второе редактирование

Я попробовал еще раз с другим файлом.Очень простой путь и имя файла

BASE_FOLDER = r'Z:\Data\Enzo\Waste_Code'
BASE_NAME = r'run3b.txt'

И снова я получаю ту же ошибку.Если я попробую альтернативный подход,

os.chdir(BASE_FOLDER)
a = os.listdir()

, затем выберите правильный файл,

fname = a[1]

Я все еще получаю ошибку при попытке импортировать его.Хотя я извлекаю его прямо из listdir.

>> os.path.isfile(a[1])
False

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

У вас может не быть полного разрешения на чтение загруженного файла.Используйте

sudo chmod -R a+rwx file_name.txt

в командной строке, чтобы дать себе разрешение на чтение, если вы используете Ubuntu.

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

Используя модуль os, вы можете проверить наличие файла в python, запустив

import os
os.path.isfile(fname)

Если он возвращает False, это означает, что ваш файл не существует с указанным именем. Если он возвращает True, он должен быть прочитан как np.loadtxt().

Дополнительно: хорошая практика работы с файлами и путями

При работе с файлами рекомендуется использовать потрясающую функциональность, встроенную в базовую библиотеку, в частности модуль os. Где os.path.join() позаботится о соединениях независимо от используемой операционной системы.

fname = os.path.join(BASE_FOLDER, BASE_NAME)

Кроме того, желательно использовать необработанные строки, добавив r в начало строки. Это будет менее утомительно при написании путей, поскольку позволяет копировать-вставлять с панели навигации. Это будет что-то вроде BASE_FOLDER = r'C:\path'. Обратите внимание, что вам не нужно добавлять последние '\', так как os.path.join позаботится об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...