2015-04-11 6 views
0

Я пытаюсь фильтровать текстовый файл на основе этой строки в Python:Фильтр по строке в питона

'2/2(100%)' 
'2/2(100%)' 
'2/3(67%)' 
'1/2(50%)' 
'3/3(100%)' 
'2/3(67%)' 
'3/3(100%)' 
'2/3(67%)' 
'7/9(78%)' 
'17/18(94% 

Я только сохранить строки, где число после / больше или равно 5. Мне удалось получить информацию о строках в списке, который я затем разделил на ('/') и сохранил первый элемент. Я снова разделил это значение на ('(') и сохранил нулевой элемент от этой операции, которая является номером. Я преобразовал число в int и использую его для оператора if if (if number >= 5, writerow()). Но код не работает прямо сейчас. Это мой код, у меня есть два различных способа преобразовать число в междунар:

methyl = [] 
with open("zr518_13_CpG_meth.bed", 'r') as txtfile,   open("zr518_13_CpG_meth_5X.bed", "w") as newfile: 
reader = csv.reader(txtfile, delimiter = '\t') 
textwriter = csv.writer(newfile, delimiter = '\t') 
    for row in reader: 
     methyl.append(row[3]) 
     fragments = [elem.split('/')[1] for elem in methyl] 
     numbers = [elems.split('(')[0] for elems in fragments] 
     # new_numbers = [] 
     # for n in numbers: 
      # new_numbers.append(int(n)) 
     for i in range(0,len(numbers)): 
      numbers[i]=int(numbers[i]) 
      if i > 4: 
       textwriter.writerow(row) 
+0

Каким образом это не работает? –

+1

Фильтрация не работает, строки со значениями меньше 5 все еще записываются в новый файл, в основном весь файл записывается снова, я не знаю, сохраняется ли целочисленное значение. – Deep

ответ

0

Вы добавляете каждую строку вы читаете в methyl, а затем проверить для каждой строки вы читаете, если есть строка methyl с знаменателем больше 4. Поэтому, когда вы читаете одну строку с знаменателем больше 4, каждая строка после этого будет записана для вывода столько раз, сколько раньше были строки с знаменателем, большим 4.

Вы можете решить эту проблему, заменив цикл с этим:

for row in reader: 
    denominator = int(row[3].split('/')[1].split('(')[0]) 
    if denominator > 4: 
     textwriter.writerow(row) 
+0

Спасибо, что сработало. – Deep

Смежные вопросы