Statstical Genetics Summer School 2023
http://www.sg.med.osaka-u.ac.jp/school_2023.html
Aug 25-27th 2023, Osaka University, The University of Tokyo, RIKENm, Japan
28. #!/usr/bin/python3
import sys
input_file = sys.argv[1]
number = int(sys.argv[2])
with open(input_file) as fh:
for line in fh:
strings = line.strip().split()
if(int(strings[0]) % number == 0):
print(strings[0]+"?t"+strings[1])
③ 笔测迟丑辞苍入门実习
赤枠内が、今回新たに書いたソースコードで、実
際の処理を担当している部分に相当します。
※文頭は、Pythonソースコード実行のために必要
な呪文のようなもの、と考えておいて下さい。
(毎回同じ呪文を書き込めば大丈夫です。)
28
29. import sys
input_file = sys.argv[1]
number = int(sys.argv[2])
with open(input_file) as fh:
???? for line in fh:
???????? strings = line.strip().split()
???????? if(int(strings[0]) % number ==0):
???????????? print(strings[0]+"?t"+strings[1])
③ 笔测迟丑辞苍入门実习
29
入力された引数を変数として代入
入力ファイルをファイルハンド
ル”fh”として開く
fhを一行ずつ読み込む
読み込み行の末尾の改行コー
ドを削除し、タブ区切りで分割
「第一列を引数で割った
余りが0かどうか」を確認
標準出力画面へ出力
sysモジュールをインポート
32. number = int(sys.argv[2])
③ 笔测迟丑辞苍入门実习
入力された引数を変数として代入
?Pythonにおける引数は「文字列」としてsys.argvに入ります。
?数字(整数)として変数に代入したい場合は、int()により「文字列」から
「整数」(=integer)に変換します。
?同じ”3”でも「文字列」、「整数」(int)、「小数」(float)によりプログラムの
動き方が変わるため、どの「型」であるかを区別することが大切です。
32
python3 SelectGeneID.py GeneID.txt 3
sys.argv[0] sys.argv[1] sys.argv[2]
33. with open(input_file) as fh:
????(命令文)
③ 笔测迟丑辞苍入门実习
入力ファイルをファイルハンドル”fh”
として開く
?Pythonでは、データを読み込む目的や、データを書き出す目的で開いた
ファイルを、ファイルハンドルという形で取り扱うことができます。
?ファイルハンドル名は自分で決められます。(file handleからfhとした)
?命令文”with open()”を使って、入力ファイル”input_file”
(=“GeneID.txt”)をファイルハンドル”fh”として開いています。
?行末に”:”をつけ、命令文はスペース4個でインデント(字下げ)します。
ファイルハンドル
“fh”
33
34. for line in fh:
????(命令文)
③ 笔测迟丑辞苍入门実习
fhを一行ずつ読み込む
?命令文”for line in fh”は、ファイルハンドルを、第一行目から最終行まで、一
行ずつ読み込んで、続く命令文で指定された処理を行います。
?for文の行末は”:”で終わります。
?続く命令文はスペース4個でインデントします。
“1 A1BG”を読みこんで命令文を実行
↓
“2 A2M”を読みこんで命令文を実行
↓
“3 A2MP1”を読みこんで命令文を実行
↓
“9 NAT1”を読みこんで命令文を実行
↓
?
34
41. statgen@statgen-PC: /mnt/c/SummerSchool/Programming
$ python3 SelectGene.py GeneID.txt 0
Traceback (most recent call last):
File "SelectGene.py", line 10, in <module>
if(int(strings[0]) % number ==0):
ZeroDivisionError: integer division or modulo by zero
statgen@statgen-PC: /mnt/c/SummerSchool/Programming
$ python3 SelectGene.py GeneID_XXX.txt 3
Traceback (most recent call last):
File "SelectGene.py", line 7, in <module>
with open(input_file) as fh:
IOError: [Errno 2] No such file or directory: 'GeneID_XXX.txt'
?ソースコードを正しく実行できない場合、エラーメッセージとエラー箇所
が通知されます。
数字を0で割ることはできない、
というエラー
指定された入力ファイルが
見つからなかった、というエラー
41
③ 笔测迟丑辞苍入门実习