🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

706閲覧

pythonで複数行を抜き出したい

Amanohara

総合スコア1

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2020/12/12 06:27

前提・実現したいこと

あるデータファイル、sample.txtがあり、中身は以下のようになっています。

txt

1J2011031100522465 002 313480 005 1302020 012 79906006V 511 7275SATSUMA PENINSULA REGION 11K 2_SUZUYA 634 N11EP 00522741ES 522945 8212 01 2 6094 01 2 2535 01 2J 11 3MM 1 3_N.KORH3548 h11EP 00522811ES 523064 1258 00 2 927 00 2 518 01 0J 11 3MM 1 4_G.CHOY1426 t11EP 00522893ES 523185 142 00 4J 11 3MM 1 5_N.KYAH3594 h11ES 00524050 11 3N 1 6E 7J2011031100534444 003 335953 015 1292949 021 118608011v 511 7281NW OFF KYUSHU 17K 8_N.IZHF3954 w11EP 00535017ES 535388 1927 01 4 K 11 3MM 1 9_IKI 621 N11EP 00535020ES 535407 2815 00 4 3628 00 4 1906 00 4J 11 3MM 1 10_TSUSHM 620 N11EP 00535500ES 540213 642 00 7 880 01 7 493 01 8J 11 3MM 1 11_N.CZEH3541 h11ES 00540330 11 3M 1 12_KU.HIR1422 t11EP 00535687 11 3N 1 13_KU2FKS1437 %11ES 00540810 11 3M 1 14_N.HRDH3569 h11EP 00535948ES 540968 11 3NN 1 15E 16J2011031100552414 019 291738 033 1303402 040 1255233 511 7296NEAR AMAMI-OSHIMA ISLAND 6K 17_NAKANO 638 N11EP 00553971ES 555061 5373 02 13 2435 02 15J 11 3MM 1 18_V.SWAN4885 o11EP 00553969ES 555101 11 3NN 1 19_YAKUHI5786 N11EP 00554196ES 555458 11 3ZZ 1 20_G.NAGT1427 t11EP 00554432ES 555828 450 03 17 J 11 3MM 1 21_N.AMMF3951 w11EP 00555228ES 561275 11 3NN 1 22_AMAMIN5783 N11EP 00555268ES 561334 327 01 25 358 02 22 J 11 3NM 1 23E 24(以下略)

ここから、特定の日時のデータ(たとえばJ201103110053444~Eまで)のみを抜き出したいです。

試してみたこと

以下の質問も参考にしました。
複数行にわたる文を抜き出す際の正規表現の使用方法
https://teratail.com/questions/168029

bashならば、

bash

1date="201103110053" 2cat sample.txt | awk '/'"${date}"'/,/^E/' > result.txt

とすればできたのですが、

Python上で行う場合、

python

1import re 2date="201103110053" 3m = re.search(r"date.+?E',sample.txt, flags=re.DOTALL)

としてもうまく行かず、Nonetypeと返されてしまいます。
(コードが間違っているからだと思いますが)

補足情報

実際は

python

1def hogehoge(date) : 2 # データを入手するコード。これで上述のsample.txtがDLされる。 3 getdata(date, output=str(date) + "_data.txt") 4 # 特定の日時のデータのみを抜き出す 5 m = re.search(…) 6 src = "fugafuga.txt" 7 with open(src, mode='a') as f: 8 f.write(m.group())

と関数に埋め込みたいです。re.searchにこだわっているわけではなく、
subprocessを使ってbashでやれないのかな、と模索しています。
(こちらも変数の受け渡しをどうするか悩んでいます…。)

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

m = re.search(r"date.+?E',sample.txt, flags=re.DOTALL)

dateという変数の中身じゃなくて、dateという文字列を探しているのだから当然ですね。
変数名と変数の中身の違いを理解しましょう。

さらに、Eは行頭でないといけないのでは?

Python

1m = re.search(f"{date}.+?\nE",~~~~, flags=re.DOTALL)

投稿2020/12/12 06:48

otn

総合スコア85886

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問