#python #arrays #string
#python #массивы #строка
Вопрос:
ВВОД:
$target: ENSG00000097007|ABL1
length: 3075
miRNA : hsa-miR-203
length: 22
mfe: -30.5 kcal/mol
p-value: 0.606919
position: 2745
target 5' C G C 3'
GUGGUCCUGGACA CAC
CACCAGGAUUUGU GUG
miRNA 3' GAU AAA 5'
Я должен удалить последние две строки, а затем назначить им два массива и прочитать каждый символ и получить вывод, как показано ниже,
После удаления строка должна быть в формате :
CACCAGGAUUUGU GUG
GAU AAA
и если символ строки считывается из строки1, то он должен быть напечатан в нижнем регистре, а если из второй строки, то он должен быть в верхнем регистре
конечный результат программы должен быть «GAUcaccaggauuuguAAAgug»
код, с помощью которого мы пытались его прочитать, не разделял строки в идеальном выравнивании, как видно на входе
вот код, который мы использовали:
import fileinput
import sys
from sys import argv
script, filename = argv
file = open(filename)
og1 = "AGUUCCUUUGUUUUGGUGACUG"
pattern = " "
pattern1 = "miRNA 3'"
file = open(filename)
for line in file:
if line.startswith(pattern):
n = file.next()
# print n[9:],# bound mirna
for i in range(0, len(og1)):
print og1[i],
print "n"
for j in range(0,len(n)):
print n[j],'
еще дополнительный ввод для решения проблемы
target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-125b-5p
length: 22
mfe: -23.9 kcal/mol
p-value: 0.610132
position 168
target 5' C C A 3'
CGCAG GGGGU AGGGA
GUGUU UCCCA UCCCU
miRNA 3' A CAA GAG 5'
target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-149-3p
length: 21
mfe: -36.6 kcal/mol
p-value: 0.598318
position 798
target 5' C UGUC AGG G 3'
CGC GCCCC CCCUCCCU
GUG CGGGG GGGAGGGA
miRNA 3' C U GCA 5'
target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-185-5p
length: 22
mfe: -27.8 kcal/mol
p-value: 0.606550
position 733
target 5' C CUCCC CAGAUGA C 3'
CGGGAGC CCU UCUCUCCA
GUCCUUG GGA AGAGAGGU
miRNA 3' A AC A 5'
target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-199a-3p
length: 22
mfe: -21.9 kcal/mol
p-value: 0.611970
position 357
target 5' C CC CCU U C 3'
AGCCAG GC GGGCUG CUGU
UUGGUU CG UCUGAU GACA
miRNA 3' A ACA 5'
target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-451a
length: 21
mfe: -21.2 kcal/mol
p-value: 0.612523
position 416
target 5' C UCAACC A 3'
CUCAGU UGGUGGC
GAGUCA ACCAUUG
miRNA 3' U UU CCAAA 5'
Ответ №1:
file = open(filename)
for segment in file.read().split("nntarget"):
interested_lines = segment.split('n')[-3:-1] #Fetch last two lines
split1 = interested_lines[0].split()
split2 = interested_lines[1].split()[2:-1]
for i in range(0,len(split1)<len(split2)):
split1.append("")
req = ""
for i in range(0,len(split2)):
req = split2[i] split1[i].lower()
for j in range(i 1,len(split1)):
req = split1[j]
print req
вывод
AguguuCAAucccaGAGucccu
CgugUcggggGCAgggaggga
AguccuugACggaAagagaggu
AuugguuACAcgUCUGAUGACA
UgagucaUUaccauugCCAAA
Комментарии:
1. Можете ли вы объяснить мне, что именно означает эта строка print split2[0] split1[0].lower() split2[1] split1[1].lower() Я новичок в python, не могу получить код
2. И я хочу сказать, что входные данные не будут одинаковыми для всех.. Как и в другом случае, ввод совершенно другой . Итак, мне нужно знать, как печатать, например, если он читается из первой строки, это означает, что он в нижнем регистре, а если из второй строки, это означает, что это верхний регистр, и в конечном выводе в одном файле, как указано выше @Ashoka Lella
3. @ramko, функция split() разбивает строку на основе пробелов. Для предпоследней строки split1 = [«CACCAGGAUUUGU»,»GUG»]. Для последней строки split2 = [«miRNA», «3′», «GAU», «AAA», «5′»].
4. @ramko, если бы ты мог вставить больше содержимого своего входного файла. Я могу обобщить код дальше
5. добавили сами входные данные, о которых идет речь.
Ответ №2:
Я бы разделил на строки, взял последние две, затем перебрал обе строки, сжатые вместе, и использовал символ, который не является a " "
!
def combinebases(base_data):
lines = base_data.splitlines()[-2:]
output = list()
lines[0] = lines[0].lower()
for ch1, ch2 in zip(*lines):
output.append(max(ch1, ch2))
return ''.join(output[10:-4])
Возможно, более безопасным результатом было бы вернуть:
return re.search("(?<=miRNA 3' )[augc] ", ''.join(output), re.I).group()
Однако регулярное выражение является излишним, если все ваши базовые длины одинаковы.
Приводит к:
>>> txt = """$target: ENSG00000097007|ABL1
length: 3075
miRNA : hsa-miR-203
length: 22
mfe: -30.5 kcal/mol
p-value: 0.606919
position: 2745
target 5' C G C 3'
GUGGUCCUGGACA CAC
CACCAGGAUUUGU GUG
miRNA 3' GAU AAA 5'"""
>>> combinebases(txt)
'GAUcaccaggauuuguAAAgug'