Я подозреваю, что ответ, который они ищут -
inFile = open("MYH7.fasta", "r").readlines()
В Perl конкатенационный код является стандартным (пример ниже).Я не уверен здесь, потому что inFile.readlines () должен создать массив, основанный на возвратах каретки, а неизменяемый код в вашем вопросе не позволяет использовать его функциональность.Следующий код отвечает на ваш вопрос, оставляя дескриптор файла открытым, и опускает readlines ().
#!/usr/local/bin/python3
inFile = open("MYH7.fasta", "r")
DNAsequence = ''
for Line in inFile:
if not(">" in Line):
if (len(Line) > 0):
DNAsequence = DNAsequence + Line
print(DNAsequence)
print(len(DNAsequence))
Версия Perl показывает, как несколько команд могут быть объединены в одну строку.
#!/usr/bin/perl
my $DNAsequence;
open (IN, "<MYH7.fasta");
while (my $line = <IN>){
chomp $line;
next if $line =~ m/>/;
$line =~ m/[ACGT]{10}/i ? $DNAsequence .= $line : next;
}
close IN;
print $DNAsequence, "\n", length($DNAsequence) . " and Python s\*\*ks\n";
Входной файл MYH7.fasta будет иметь формат
>example_sequence
ACGCGTAGACGTATAG
Я думаю, что в вашем коде есть ошибка, потому что если в последовательности присутствуют возврат каретки, они будут перенесены в переменную DNAsequence.В Perl они удаляются с помощью "chomp" или могут быть явно удалены с помощью $ _ = ~ s / \ n // (или в этом случае, например, $ line = ~ s / \ n //;).Наличие \ n может усложнить последующий анализ.