#python #file-io
#питон #файл-ввод-вывод #python #file-io
Вопрос:
Я создаю программу для чтения файла FASTA и разделения на некоторые определенные символы, такие как ‘ >
‘ и т.д. Но я столкнулся с проблемой.
Программная часть:
>>> def read_FASTA_strings(seq_fasta):
... with open(seq_fasta.txt) as file:
... return file.read().split('>')
Ошибка:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'seq_fasta' is not defined
Как избавиться от этой проблемы?
Комментарии:
1.
'seq_fasta.txt'
должно быть в кавычках, я думаю.2. Убедитесь, что вы не изобретаете велосипед заново: biopython.org/wiki/SeqIO
Ответ №1:
Вам нужно указать имя файла в виде строкового литерала:
open('seq_fasta.txt')
Ответ №2:
Вам нужно заключить имя файла в кавычки: open('seq_fasta.txt')
.
Кроме того, вы могли бы выбрать другое имя, но file
поскольку использование этого имени затеняет встроенное имя.
Ответ №3:
Ваша программа видит seq_fasta.txt в качестве метки объекта, аналогично тому, как вы использовали бы math.pi после импорта математического модуля.
Это не сработает, потому что seq_fasta.txt на самом деле ни на что не указывает, следовательно, ваша ошибка. Что вам нужно сделать, так это либо заключить его в кавычки ‘seq_fasta.txt ‘ или создайте текстовый строковый объект, содержащий это, и используйте это имя переменной в функции open. Из-за .txt он считает seq_fasta (в заголовке функции) и seq_fasta.txt (в теле функции) находятся две разные метки.
Далее, вы не должны использовать file, поскольку это важное ключевое слово для python, и вы можете столкнуться с некоторыми сложными ошибками и вредной привычкой.
def read_FASTA_strings(somefile):
with open(somefile) as textf:
return textf.read().split('>')
а затем использовать его
lines = read_FASTA_strings("seq_fasta.txt")
Комментарии:
1. ага .. спасибо за твое предложение и усилия 🙂