2015-12-01 3 views
-1

У меня есть файл fasta, содержащий последовательности PapillomaViruses (целые геномы, частичные CDS, ....), и я использую biopython для извлечения целых геномов (около 7kb) из этих файлов, так вот мой код:IOError при извлечении последовательностей из файла fasta с использованием biopython

rec_dict = SeqIO.index("hpv_id_name_all.fasta","fasta") 

for k in rec_dict.keys(): 

    c=c+1 

    if len(rec_dict[k].seq)>7000: 

     handle=open(rec_dict[k].description+"_"+str(len(rec_dict[k].seq))+".fasta","w") 

     handle.write(">"+rec_dict[k].description+"\n"+str(rec_dict[k].seq)+"\n") 

     handle.close() 

Я использую словарь для избежания загрузки всего в память. Переменные «с» используются, чтобы узнать, сколько итераций сделаны прежде, чем эта ошибка выскакивает:

Traceback (most recent call last): 

File "<stdin>", line 4, in <module> 

IOError: [Errno 2] No such file or directory: 'EU410347.1|Human papillomavirus FA75/KI88-03_7401.fasta' 

когда я напечатаю значение «с», я получаю 9013, когда файл содержит 10447 последовательностей, то есть для цикл не прошел через все последовательности (счетчик выполняется до условия «if», поэтому я подсчитываю все итерации, а не только те, которые соответствуют условию). я не понимаю ошибку INPUT/OUTPUT, она должна создать файл «EU410347.1 | Файл папилломы человека FA75/KI88-03_7401.fasta» вместо проверки его существования, не так ли?

+0

Это дубликатом вопрос на другом сайте: https://www.biostars.org/p/167918/ – peterjc

+0

я задавал вопрос на обоих сайтах, потому что я был в спешке, и мне нужен был быстрый ответ –

ответ

0

Файл, который вы пытались создать - «EU410347.1 | Папилломавирус человека FA75/KI88-03_7401.fasta» - содержит косую черту ('/'), которая интерпретируется Python как каталог «EU410347». 1 | Папилломавирус человека FA75 », за которым следует имя файла« KI88-03_7401.fasta », поэтому Python жалуется, что каталог не существует.

Вы можете заменить косую черту с чем-то еще, например, как

handle=open(rec_dict[k].description.replace('/', '_')+"_"+str(len(rec_dict[k].seq))+".fasta","w")