Не удается открыть файл: «Ошибка имени: имя не определено»

#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. ага .. спасибо за твое предложение и усилия 🙂