#python #path #operating-system
#python #путь #операционная система
Вопрос:
Я пишу скрипт, в котором я хочу, чтобы пользователь вводил путь к файлу, который затем будет проанализирован остальной частью скрипта, чтобы узнать, с каким файлом работать.
Для краткости вот начало кода, в котором у меня проблема:
### import modules
import pyabf
#### open file and extract basic data
file_path = input('file path?')
abf = pyabf.ABF(file_path)
data = abf.data
Если я запускаю скрипт в этой форме, я получаю следующую ошибку:
Файл «/Users/XXX/anaconda3/envs/blah_blah/lib/python3.6/site-packages/pyabf/abf.py «, строка 65, при инициализации возникает ошибка значения(«файл ABF не существует: %s» % self.abfFilePath) Ошибка значения: файл ABF не существует
И вот часть скрипта, которая выдает мне эту ошибку:
# clean-up file paths and filenames, then open the file
self.abfFilePath = os.path.abspath(abfFilePath)
if not os.path.exists(self.abfFilePath):
raise ValueError("ABF file does not exist: %s" % self.abfFilePath)
self.abfID = os.path.splitext(os.path.basename(self.abfFilePath))[0]
log.debug(self.__repr__())
Если я запускаю строки кода по отдельности в консоли, все работает:
abf = pyabf.ABF(file_path) # same path as before works to open the file
data = abf.data # then manages to extract the correct numpy array.
Что происходит с путем, когда он вводится в качестве пользовательского ввода, в отличие от указания непосредственно в аргументе, где он будет использоваться? Я пытался ввести путь разными способами с помощью или без » or (), но я не могу заставить pyabf распознать его.Скрипт ABF.
Я взглянул на ОС.информация о пути и, насколько я могу понять, строка os.path.abspath (abfFilePath), которая сейчас прослушивается, должна просто возвращать абсолютное имя пути. Я уверен, что это, вероятно, что-то простое и очевидное, чего я просто не понимаю.
Надеюсь, кто-нибудь здесь сможет помочь.
Спасибо!
Комментарии:
1. Вы проверили, есть ли у пользователя права на доступ к файлу, который они вводят, или что файл не скрыт?
2. Извините, вы можете прояснить это? Файл находится в обычной папке, то есть не в папке скрытого системного типа — если вы это имеете в виду. И на это нет ограничений — любой может прочитать и записать его. Я работаю на Mac OS 10.12 и использую Python 3.6 в Spyder на случай, если это что-то изменит. Забыл добавить это к моему первоначальному сообщению.
3. Я собираюсь предположить,
abspath
использует корень скрипта вместо рабочего каталога пользователя. Это объясняет, почему это работает, когда вы запускаете код вручную в консоли, а не из скрипта.4. Сообщение, о котором вы сообщаете, является
ABF file does not exist
но код, который выдает это сообщение, следует за ним с двоеточием и именем пути, по которому ваш код проверяет существование. На какое имя файлаos.path.exists()
жалуется? Я подозреваю, что когда вы запускаете его в скрипте, ваш текущий рабочий каталог не соответствует вашим ожиданиям, и этоabspath
приводитexists
к поиску в неправильном месте.5. Извините, просто чтобы убедиться, что я понял ваш отзыв. Проблема в том, что мой новый скрипт и скрипт pyABF, на который я ссылаюсь, не находятся в одной папке?