入力ファイルdata.datは次のように、0と1が並んでいます。
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 0 1 1 0 1 1 1 1 1 1 1 0 0 0 1 1
まず、すべての11011という並びを11111に変更します。
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1
つぎに任意の0からつぎの0までが10字以内であれば、その0から次の0までの1を全て0に変えます。
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1
このようなプログラムをpythonで書きたいのですが、どのようにすればよいでしょうか。なお、スペースを無駄にしないように横に書きましたが、data.datは
1
1
1
1
0
0
…
のように一文字ずつ改行されているものとします。想定としてはdata.datは5万行程度のデータなので何かしらの工夫が必要だと思うのですが…。
追記1
たとえば、一つ目のプロセスに関しては、
python
1lines = len(open('data.dat').readlines()) 2 3for p in range(1,lines-5): 4 target_line1 = linecache.getline("data.dat",p) 5 target_line2 = linecache.getline("data.dat",p+1) 6 target_line3 = linecache.getline("data.dat",p+2) 7 target_line4 = linecache.getline("data.dat",p+3) 8 target_line5 = linecache.getline("data.dat",p+4) 9 10 if target_line1 == 1 and target_line2 == 1 and target_line3 == 0 and target_line4 == 1 and target_line5 == 1: 11 #p+3行目を1に書き換える
とすればよいのでしょうが、data.datの特定の行を書き換える方法がわかりません。
回答1件
あなたの回答
tips
プレビュー