-1

ファイル内で検索する必要がある特定のルールを作成しました。これらのルールは、基本的に、単語数が不明なフレーズです。例えば、

mutant...causes(...)GS

これは、ファイル内で検索したいフレーズです。いくつかの単語がここ...(つまり、このギャップ) にあるべきであることを(...)意味し、このギャップに単語がある場合とない場合があることを意味します。GSここに私が知っている固定文字列変数があります。

基本的に、私はそのような多くのファイルを調べてこれらのルールを作成し、特定のファイルが探していることを実行することを教えてくれます。

問題は、ギャップに任意の(少数の)単語が含まれる可能性があることです。ギャップの 1 つから始まる新しい行が存在する場合もあります。したがって、同一文字列の一致を行うことはできません。

いくつかの例のテキスト -

  1. !Series_summary "To better understand how the expression of a *mutant gene that causes ALS* can perturb the normal phenotype of astrocytes, and to identify genes that may

ここで、GS は ALS (定義済み) であり、スター付きのテキストはルールの肯定的な一致として検出されるはずですmutant...causes(...)GS

  1. !Series_overall_design "The analysis includes 9 samples of genomic DNA from isolated splenic CD11c+ dendritic cells (>95% pure) per group. The two groups are neonates born to mothers with *induced allergy to ovalbumin*, and normal control neonates. All neonates are genetically and environmentally identical, and allergen-naive."

ここで、GS はオボアルブミン (定義済み) であり、星印付きのテキストは、ルールの肯定的な一致として検出されるはずです。 induced...to GS

私はPythonでのプログラミングの初心者なので、どんな助けでも素晴らしいです!!

4

1 に答える 1

0

次のコードを使用すると、ファイルが読み込まれ、Python の正規表現を使用して一致する可能性のあるすべての行が表示されます。これは、すべての正しい行に一致していることを判断するのに役立ちます。

import re

with open('input.txt', 'r') as f_input:
    data = f_input.read()
    print re.findall(r'(mutant\s.*?\scauses.*?GS)', data, re.S)

次に、1 つの一致の存在のみを検索するには、次のように変更findallsearchます。

import re

with open('input.txt', 'r') as f_input:
    data = f_input.read()
    if re.search(r'(mutant\s.*?\scauses.*?GS)', data, re.S):
        print 'found'

このような多くのファイルでこれを実行するには、次のように変更できます。

import re
import glob

for filename in glob.glob('*.*'):
    with open(filename, 'r') as f_input:
        data = f_input.read()
        if re.search(r'mutant\s.*?\scauses.*?GS', data, re.S):
            print "'{}' matches".format(filename)
于 2016-01-07T07:02:51.727 に答える