1

ターゲットに正規表現パターンを作成しました。CSVファイルから取得したデータを含む文字列です。私はプログラミングのほぼ完全な初心者ですが、私は本当にこのステップで立ち往生しており、正規表現が私の問題からの(私が思うに...)最良の選択であるため、問題を修正するために一生懸命努力しました。は、CSVファイルからのデータの検索ですが、それらの間にはいくつかの違いがありますが、正式なプロトコル(バイオインフォマティクス分野のMIAMEファイル)に従うパターンがあります。これは私のコードです

import re
    ficheiro=open(raw_input('write the name of the file (formato CSV):'), 'r')
    lista_file=ficheiro.readlines()
    str_file=str(lista_file)
    list_spr=[]
    value_spr=[]
    for a in str_file:
        regex_spr = re.search(r"(spr[0-9]{4})[^\t.]*\t([0-9.]+)", a, re.I|re.M)
        print regex_spr.group()
        list_spr +=regex_spr.group(1)
        value_spr +=regex_spr.group(2)

しかし、結果は常に次'NoneType'のようなものになります

Traceback (most recent call last):
  File "C:\EDPython27\test\put_words_in_dict.py", line 112, in <module>
    print regex_spr.group()
AttributeError: 'NoneType' object has no attribute 'group'

次に、パターンのテストに使用したstr_fileの範囲の一部を示します。

('Reporter Identifier\tVALUE\n', 'spr0320060100000320\t4.784064198\n', 'spr0963060100000963\t3.646246197\n', 'spr1586060100001584\t5.755770215\n', 'spr1102060100001101\t5.794439261\n', 'spr1727060100001725\t6.452100774\n', 'spr0552060100000552\t6.816527711\n', 'spr0807060100000807\t3.185267941\n', 'spr0322060100000322\t5.889496662\n', 'spr0971060100000971\t3.112604228\n', 'spr0490060100000490\t6.608164616\n', 'spr0471060100000471\t6.807244139\n', 'spr0321060100000321\t5.331036948\n', 'spr1070060100001069\t6.408937689\n', 'spr1585060100001583\t6.157044216\n', 'spr1189060100001188\t3.481847857\n', 'spr1191060100001190\t3.523784616\n', 'spr1081060100001080\t6.708517655\n', 'spr1071060100001070\t7.092586967\n', 'spr1101060100001100\t6.294650154\n', 'spr0561060100000561\t7.52495517\n', 'spr0802060100000802\t8.299020685\n', 'spr1195060100001194\t6.143485258\n', 'spr0470060100000470\t5.869271803\n', 'spr1944060100001941\t7.060765363\n', 'spr0968060100000968\t6.276636704\n', 'spr1072060100001071\t7.267895537\n', 'spr0972060100000972\t5.535911422\n', 'spr1821060100001819\t7.660640949\n', 'spr0316060100000316\t6.399083059\n', 'spr0129060100000129\t6.693897057\n', 'spr0966060100000966\t6.208969299\n', 'spr0323060100000323\t6.230187159\n', 'spr1466060100001465\t7.609506586\n', 'spr0964060100000964\t6.286528191\n', 'spr1665060100001663\t5.597969101\n', 'spr0969060100000969\t5.122425278\n', 'spr1394060100001393\t7.310099682\n', 'spr0683060100000683\t7.397780719\n', 'spr1649060100001647\t6.121430945\n', 'spr0536060100000536\t7.936838283\n', 'spr1020060100001020\t7.339227818\n', 'spr0682060100000682\t7.435907739\n', 'spr0606060100000606\t6.251491879\n', 'spr0491060100000491\t5.400560984\n', 'spr0939060100000939\t6.928170725\n', 'spr1492060100001491\t7.451461913\n', 'spr0965060100000965\t5.610110186\n', 'spr1188060100001187\t3.384989187\n', 'spr1296060100001295\t5.927021756\n')

すべてのアドバイザーに事前に感謝します。

4

1 に答える 1

1

docs上からre.search()

文字列をスキャンして、正規表現パターンが一致する場所を探し、対応する MatchObject インスタンスを返します。文字列内のどの位置もパターンに一致しない場合はNoneを返します

したがって、ここでの回避策は、そうであるかどうかを確認することregex_spr ですNone

for a in str_file:
    regex_spr = re.search(r"(spr[0-9]{4})[^\t.]*\t([0-9.]+)", a, re.I|re.M)
    if regex_spr is not None:
        print regex_spr.group()
        list_spr +=regex_spr.group(1)
        value_spr +=regex_spr.group(2)
    else:
         #do something else
于 2013-01-20T03:24:19.103 に答える