前回こちらで回答して頂いた https://teratail.com/questions/165782 コードを追記して、動かしてみました。
その処理自体はうまく行ったのですがその後の段階で「is not in list」というエラーが発生しました。
おそらくスキップ処理後リストに格納する段階で不具合があったのではないかと…
宜しくお願い致します。
エラーが出たコードがこちらになります。
Python
1file = open('test.txt','r') 2string = file.readline() 3 4while string: 5 is_skip = False 6 7 if 'ANISOU' in string: # ANISOUを含む 8 #if string.startswith('ANISOU'): # ANISOUで始まる 9 is_skip = True 10 11 12 if not is_skip: 13 print(string.rstrip()) 14 string = file.readline() 15 16 17 18x = [0]*10000 19y = [0]*10000 20z = [0]*10000 21array_number = [0]*10000 #配列番号 22tag = [0]*10000 #物質名 23atom = [0]*10000 #原子名 24chain = [0]*10000 #鎖 25 26#最初の読み込み------------------------------------ 27cnt = 0 28while string: 29 cnt = int(string[6:11],10) 30 if string[36] == ' ': 31 string = file.readline() 32 continue 33 34 x[cnt] = float(string[31:38]) 35 y[cnt] = float(string[39:46]) 36 z[cnt] = float(string[47:54]) 37 array_number[cnt] = float(string[22:26]) 38 tag[cnt] = string[17:20] 39 atom[cnt] = string[13:16] 40 chain[cnt] = string[21] 41 42 string = file.readline() 43 44print('READ FINISH.'); #読み込み完成すると表示 45 46#input_intron---------------------------------------- 47 48print('intronの数は?') 49intron_kazu = int(input()) #intron個数 50 51x_intron = []*(intron_kazu) 52y_intron = []*(intron_kazu) 53z_intron = []*(intron_kazu) 54list_intron = [] #intronの通しナンバー 55 56print('intron位置を全て入力して') 57print('例:入力➡ENTER➡入力➡ENTERの繰り返し') 58for i in range(intron_kazu): 59 60 intron_number = int(input()) #intronの残基番号を入力 61 list_intron.append(intron_number) 62 63 index = array_number.index(intron_number) #intorn分子の最初の通しナンバー 64 count = array_number.count(intron_number) #intron分子を構成する原子数 65 intron_finish = index + count #(intron原子の最後の通しナンバー + 1) 66 67
元のテキストファイルがこちらになります
ATOM 1 N ALA A 9 -10.745 32.779 -2.046 1.00 61.24 N
ANISOU 1 N ALA A 9 7527 8194 7549 2491 121 -1211 N
ATOM 2 CA ALA A 9 -9.707 33.771 -2.328 1.00 60.43 C
ANISOU 2 CA ALA A 9 7556 8106 7300 2484 202 -1169 C
ATOM 3 C ALA A 9 -8.532 33.739 -1.303 1.00 61.21 C
ANISOU 3 C ALA A 9 7589 8327 7340 2293 284 -1015 C
ATOM 4 O ALA A 9 -8.683 33.287 -0.159 1.00 57.06 O
ANISOU 4 O ALA A 9 6940 7894 6849 2153 299 -972 O
ATOM 5 CB ALA A 9 -10.311 35.169 -2.384 1.00 61.35 C
ANISOU 5 CB ALA A 9 7779 8192 7338 2507 226 -1295 C
ATOM 6 N TYR A 10 -7.370 34.249 -1.756 1.00 58.26 N
ANISOU 6 N TYR A 10 7304 7947 6887 2302 335 -930 N
ATOM 7 CA TYR A 10 -6.099 34.359 -1.034 1.00 58.08 C
ANISOU 7 CA TYR A 10 7243 8003 6822 2150 400 -787 C
ATOM 8 C TYR A 10 -6.143 35.449 0.019 1.00 67.00 C
ANISOU 8 C TYR A 10 8380 9178 7900 2016 432 -811 C
ATOM 9 O TYR A 10 -5.993 35.148 1.206 1.00 66.49 O
ANISOU 9 O TYR A 10 8226 9198 7839 1881 443 -770 O
ATOM 10 CB TYR A 10 -4.965 34.694 -2.018 1.00 57.22 C
ANISOU 10 CB TYR A 10 7222 7854 6665 2231 444 -687 C
ATOM 11 CG TYR A 10 -4.674 33.623 -3.042 1.00 55.74 C
ANISOU 11 CG TYR A 10 7039 7641 6497 2392 410 -644 C
ATOM 12 CD1 TYR A 10 -5.589 33.329 -4.050 1.00 57.18 C
ANISOU 12 CD1 TYR A 10 7290 7737 6700 2599 335 -758 C
そしてスキップ処理してPython に表示されたのがこちらです。
ATOM 1 N ALA A 9 -10.745 32.779 -2.046 1.00 61.24 N
ATOM 2 CA ALA A 9 -9.707 33.771 -2.328 1.00 60.43 C
ATOM 3 C ALA A 9 -8.532 33.739 -1.303 1.00 61.21 C
ATOM 4 O ALA A 9 -8.683 33.287 -0.159 1.00 57.06 O
ATOM 5 CB ALA A 9 -10.311 35.169 -2.384 1.00 61.35 C
ATOM 6 N TYR A 10 -7.370 34.249 -1.756 1.00 58.26 N
ATOM 7 CA TYR A 10 -6.099 34.359 -1.034 1.00 58.08 C
ATOM 8 C TYR A 10 -6.143 35.449 0.019 1.00 67.00 C
ATOM 9 O TYR A 10 -5.993 35.148 1.206 1.00 66.49 O
ATOM 10 CB TYR A 10 -4.965 34.694 -2.018 1.00 57.22 C
ATOM 11 CG TYR A 10 -4.674 33.623 -3.042 1.00 55.74 C
ATOM 12 CD1 TYR A 10 -5.589 33.329 -4.050 1.00 57.18 C
ATOM 13 CD2 TYR A 10 -3.436 32.994 -3.083 1.00 54.91 C
ATOM 14 CE1 TYR A 10 -5.317 32.361 -5.013 1.00 53.48 C
ATOM 15 CE2 TYR A 10 -3.147 32.033 -4.048 1.00 54.87 C
ATOM 16 CZ TYR A 10 -4.096 31.713 -5.006 1.00 55.01 C
ATOM 17 OH TYR A 10 -3.855 30.748 -5.947 1.00 42.22 O
ATOM 18 N ALA A 11 -6.341 36.729 -0.438 1.00 66.89 N
ATOM 19 CA ALA A 11 -6.371 38.001 0.307 1.00 67.92 C
ATOM 20 C ALA A 11 -7.005 37.876 1.678 1.00 72.70 C
ATOM 21 O ALA A 11 -6.570 38.550 2.621 1.00 74.55 O
ATOM 22 CB ALA A 11 -7.114 39.055 -0.498 1.00 69.00 C
ATOM 23 N GLN A 12 -8.038 37.023 1.784 1.00 67.03 N
ATOM 24 CA GLN A 12 -8.740 36.734 3.030 1.00 66.02 C
ATOM 25 C GLN A 12 -7.944 35.739 3.897 1.00 64.78 C
ATOM 26 O GLN A 12 -7.729 35.980 5.091 1.00 65.92 O
ATOM 27 CB GLN A 12 -10.134 36.167 2.718 1.00 67.75 C
ATOM 28 N GLU A 13 -7.503 34.627 3.286 1.00 56.75 N
ATOM 29 CA GLU A 13 -6.809 33.555 3.988 1.00 53.08 C
ATOM 30 C GLU A 13 -5.357 33.865 4.378 1.00 45.98 C
ATOM 31 O GLU A 13 -4.805 33.048 5.098 1.00 43.30 O
ATOM 32 CB GLU A 13 -6.860 32.263 3.161 1.00 54.87 C
ATOM 33 N LYS A 14 -4.742 35.018 3.973 1.00 38.34 N
ATOM 34 CA ALYS A 14 -3.341 35.298 4.317 0.50 37.05 C
・
・
(約3000行)
エラーメッセージがこちらです。
Traceback (most recent call last):
File "C:\Users\sakura\Desktop\python 1031\1行飛ばしテスト.py", line 70, in <module>
index = array_number.index(intron_number) #intorn分子の最初の通しナンバー
ValueError: 47 is not in list
ちなみにスキップ処理するコードを入れる前の、エラーが発生しなかったコードがこちらになります。
Python
1file = open('test2.txt','r') #ファイルを変えるときはここを変える 2string = file.readline() 3string = file.readline() 4 5x = [0]*10000 6y = [0]*10000 7z = [0]*10000 8array_number = [0]*10000 #配列番号 9tag = [0]*10000 #物質名 10atom = [0]*10000 #原子名 11chain = [0]*10000 #鎖 12 13#最初の読み込み------------------------------------ 14cnt = 0 15while string: 16 cnt = int(string[6:11],10) 17 if string[36] == ' ': 18 string = file.readline() 19 continue 20 21 x[cnt] = float(string[31:38]) 22 y[cnt] = float(string[39:46]) 23 z[cnt] = float(string[47:54]) 24 array_number[cnt] = float(string[22:26]) 25 tag[cnt] = string[17:20] 26 atom[cnt] = string[13:16] 27 chain[cnt] = string[21] 28 29 string = file.readline() 30 31print('READ FINISH.'); #読み込み完成すると表示 32 33#input_intron---------------------------------------- 34 35print('intronの数は?') 36intron_kazu = int(input()) #intron個数 37 38x_intron = []*(intron_kazu) 39y_intron = []*(intron_kazu) 40z_intron = []*(intron_kazu) 41list_intron = [] #intronの通しナンバー 42 43print('intron位置を全て入力して') 44print('例:入力➡ENTER➡入力➡ENTERの繰り返し') 45for i in range(intron_kazu): 46 47 intron_number = int(input()) #intronの残基番号を入力 48 list_intron.append(intron_number) 49 50 index = array_number.index(intron_number) #intorn分子の最初の通しナンバー 51 count = array_number.count(intron_number) #intron分子を構成する原子数 52 intron_finish = index + count #(intron原子の最後の通しナンバー + 1) 53 54