Подсчет вхождений в файлы spyder python

#python

#python

Вопрос:

Я пишу простую программу, которая позволяет мне сканировать список шаблонов (patterns.txt ) из 000 010 100 и т.д. против списка последовательностей (sequence.txt ) 010100100010 и т.д.

Программа должна возвращать #количество вхождений 0 и 1 в каждой строке в файле последовательности #количество вхождений каждого шаблона в списке шаблонов для каждой строки в файле последовательности

— мой текущий код выглядит следующим образом Я знаю, что это не выглядит много, но я действительно новичок в этом и стараюсь изо всех сил —

 #reading and opening files
file1 = open('patterns.txt', 'r')
file2 = open('sequences.txt', 'r')
targetSeq = "001010101010000101011100010101"

#storing the lines in patterns.txt as list using slicing
with open('patterns.txt', 'r') as file1:
patternList = file1.readlines()
print(patternList)

with open('sequences.txt' , 'r') as file2:
#converting into list
sequencelist = file2.readlines()
for line in sequencelist:
    type = line.split(',')
    print(sequencelist)
    count = sequencelist.count(0)
    print(count)
  

* моя главная проблема здесь в том, что я не знаю, как я могу сканировать каждую строку в file2 по шаблонам в file1 и выдавать отдельные строки в соответствии с образцом вывода. был бы очень признателен за любую помощь.

 [output sample][1] 


[1]: https://i.stack.imgur.com/wWqSU.png
  

Ответ №1:

Вам нужно будет использовать вложенные циклы. Несколько вещей были неясны, например, как вычисляется сходство. Вы можете использовать приведенный ниже шаблон для перебора данных.

 with open('patterns.txt', 'r') as file1:
    patternList = file1.readlines()

with open('sequences.txt' , 'r') as file2:
    #converting into list
    sequencelist = file2.readlines()

for line in sequencelist:
    # is sequences.txt comma-separated or line separated or both? 
    # I'm assuming it's line separated
    print(sequencelist)
    count = sequencelist.count('0')
    print(count)
    for pattern in patternList:
        print(f"Number of occurrences of {pattern} : {len(re.findall(pattern, sequencelist))}"
    
  

Кроме того, обратите внимание, что это re.findall() было только из головы. Вы должны углубиться и попробовать создать свой собственный логический блок или изучить другие доступные эффективные варианты.

Ответ №2:

Это должно быть что-то вроде этого:

 for line in sequencelist:
    for pattern in patternList:
        # Code to compare sequence with pattern
        .
        .
        .