Pythin Tips: まずやりたいこと
なんかのファイルを加工しようとしたら、なぜか、各行でフォーマットがちょっと違う、、、
ありますね。
例えば、以下のようなファイルです。
1 2 3 |
#file : aa.txt aa bb: cc dd ee #ddを抽出したい ee dd : cc bb aa #bbを抽出したい |
例えば、このようなフォーマットで、一行目と二行目のccの次の値を抽出したいのですが、splitで分けると、目的の単語の位置が違います。
Splitだと、1行目なら、3カラム目。
2行目なら、4カラム目です。
何かのツールが吐き出したファイルとかでたまにあるのですが、面倒なんですよね。
例のように、2行ならいいですが、何万行とあって、数行だけ、フォーマット違うとか、ありますよね。
どこが変換されてないのか?分かんなくて、ちょっと時間を無駄にしたりします。
今回は、splitで、前からの単語数を数えて、、、
1 2 3 4 5 6 7 8 9 |
#!/usr/bin/env python ifile = "aa.txt" for line in open(ifile): if line.find("cc") >= 0 : print (line, end="") get_word = line.split()[3] print (get_word) |
結果:
1 2 3 4 5 |
aa bb: cc dd ee dd ee dd : cc bb aa cc #ここが、bbであってほしいのに、、、 |
スポンサーリンク
ファイル内の特定単語のその次の単語を抽出する方法
このような例の場合、以下のように、抽出単語の前の文字列の場所から、一つ後ろの単語を抽出する方法もあります。
実際には、色々な方法があるので、自身の加工したいファイルを確認して、好みの方法を使うといいと思います。
手前の単語の場所から、単語を抽出すると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 |
#!/usr/bin/env python ifile = "aa.txt" for line in open(ifile): if line.find("cc") >= 0 : print (line, end="") pos = line.split().index("cc") pos_p1 = int(pos) + 1 get_word = line.split()[pos_p1] print (get_word) |
結果は、おわかりのように、
aa bb: cc dd ee
dd
ee dd : cc bb aa
bb #ここが正しく抽出されるようになった
ポイントは、indexです。配列のポジション(位置)をとってくれるメソッドです。
split()は、配列にされるので、indexを使うといいというわけです。
このへんは、また、別の機会にでもお話ししましょう。
はい、今回は、ここまでにします。
indexって、たまに忘れてたりするので、ちょっとメモしておきました。
何かの役立てば、幸いです。