質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

Q&A

2回答

1963閲覧

特定の条件を満たす行を複数行にわたって書き出す

aaaaaao

総合スコア4

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

0グッド

0クリップ

投稿2019/09/13 04:33

編集2019/09/13 06:20

イメージ説明pythonについての質問です。

こちら.csvの内容の特定の条件を満たす行を取り込んで.txtに書き出しを行いたいと考えています。

こちらの.csvファイルの内容は、約1000ステージほど同じパターン

ID Reaction~
Node ~

Joint~

の繰り返し(数値が違う)で中身があり
画像の青くハイライトした部分のみを1ステージごとに1000ステージ分、テキストファイルに書き出すプログラムを教えてほしいです。

希望の出力

Node 1101 ~~~~~

Node 1101 ~~~~~


始めたばかりで、わからないので教えていただきたいです。

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

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

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

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

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

Y.H.

2019/09/13 04:36

タグの[C][C++]は質問内容に関係するのでしょうか? 関係する場合はC,C++に関する詳細とコードを、質問を編集し追記ください。 関係ない場合はタグから削除してください。
Zuishin

2019/09/13 04:49

これ、本当に CSV なんですか?
aaaaaao

2019/09/13 04:49

削除しました
Zuishin

2019/09/13 05:01

このデータ「だけ」処理できればいいのであれば簡単です。 テキストエディタで編集すればいいでしょう。 そうでないなら仕様を明らかにしなければ変更に対応できません。 ここで対話できないなら、適当なエスパー回答で満足してもらうほかありません。
coco_bauer

2019/09/13 05:19

条件を明確にしてください。 また、元のファイルの内容についても詳細を示してください。 例えば、aで始まる行と、dで始まる行は、必ず交互に入っているのですか? 行の最初の文字が、a1,x1,a2,x2,d3,x3,d4 のように入れ子になっている可能性はありますか?  入れ子の可能性がある場合、上記の例では、どんな出力が欲しいのでしょうか?
aaaaaao

2019/09/13 05:21

すいません回答になっているかわかりませんが、具体的な内容を記載しました。
Zuishin

2019/09/13 05:28

エスパー回答にベストアンサーをつけて追加質問をし、すぐに答えてもらえなければ外して質問を編集する人ですね。 そしてはじめたばかりなのになぜか気に入らない回答者がいて、それを無視すると。
aaaaaao

2019/09/13 05:34

coco_bauerさん 具体的な内容になるように編集をしました。 一応、内容は交互になっています
Y.H.

2019/09/13 05:35

タグ[CSV]も関係ないので削除ください。 ・・・質問が編集され、内容がガラッと変わっちゃいましたね。
aaaaaao

2019/09/13 05:36

Zuishinさん 回答をもらえたことに満足してベストアンサーを選んでしまっただけです。 もう少し具体的な回答がほしいため、内容を編集しました。 また、回答者を無視はしていません。
Zuishin

2019/09/13 05:38

あなたが仕様をすぐに明らかにせず無視していたせいで、can110 さんの回答が哀れなことになっています。
aaaaaao

2019/09/13 05:42

Y.H.さん 削除しました。もう少し具体的に書いたほうがよいと思いましたので変更しました
t_obara

2019/09/13 05:43

csvじゃなくてtsv? 1フィールドが”Node”で2フィールドが1101の行を抜き出したいということ? それなら、awkの方が簡単そうですね。
aaaaaao

2019/09/13 05:45

Zuishinさん 自分には、どこが哀れなのかわからないほど初心者なのですが、回答者さんに自分の質問によって不快な思いにさせていたら申し訳ないです。
aaaaaao

2019/09/13 05:46

t_obaraさん ありがとうございます。awkも考えたのですがPythonが簡単とのことだったので質問をしていました。 もし、有効なものがなけれなawkに移行したいと思います。
t_obara

2019/09/13 05:52

いやいや、2行目が一番のポイントなのですが、なぜスルーするのでしょうか。Yesだから、awkに反応したという認識でしょうか。
KojiDoi

2019/09/13 05:53

そもそも「ステージ」っていうのが何を指しているのかも理解できないのですが、私だけ?
Zuishin

2019/09/13 05:53

あの回答では、この質問の回答としては不適切です。 しかし、編集する前であれば成立していました。 質問が全く別物になったせいで、can110 さんの回答が無意味なものになりました。 can110 さんのせいではないのに、無意味な回答になったことを指して哀れと言いました。 回答する前に質問の意図を明確にするのがこの欄の役目です。 私のことをあなたが無視したせいで、「ああこの人は話が通じない人なんだな」と他の回答者に思わせてしまいました。 それでも答えるなら、このようなエスパー回答をするほかありません。 私は「エスパー回答で満足しろ」と言いましたよね? なぜ今更別の質問をしてるんですか? これはまったく違う質問です。
aaaaaao

2019/09/13 05:56

t_obaraさん すいません、フィールドがあまりわからないので、あっているかわかりませんが Node 1101 ~ は同じ行にあって、それごと抜き出したいということです。
aaaaaao

2019/09/13 05:59

KojiDoiさん こちらの解析ソフトのステージをそのまま使用していました。すいません ステージというのは、繰り返しの数のことです。 1000ステージというのは、1000回同じ内容(数値は違う)がでてくるということです。
t_obara

2019/09/13 06:02

フィールドが分からない。。csvで質問しているのであれば、wikiでcsvを調べるとかしてみてはいかがでしょうか。 「それごと」とは何を意図しているのでしょうか。
KojiDoi

2019/09/13 06:06

画像で示してある内容が「一つのステージ」の中身であるという理解でいいのですか?
Y.H.

2019/09/13 06:07

> 1000ステージごとにテキストファイルに書き出す これは1000.txt 2000.txtのようにファイルを分けて出力するということですか?
Zuishin

2019/09/13 06:08

t_obara さん、CSV でも TSV でもありませんね。複合フォーマットのテキストデータで、テーブル部分もタブではなく複数の空白で区切られているようです。
can110

2019/09/13 06:10

> tatsukiiiさん この欄に書くのもなんですが、半身で回答したのでとくには気にしていません。 というかitertoolsでテキスト生成したかっただけな回答なので :p
aaaaaao

2019/09/13 06:14

t_obaraさん 失礼しました。Node の行の8フィールドまでを1000ステージ分抜きだしたいということです
aaaaaao

2019/09/13 06:14

KojiDoiさん まさにそのとおりです。
aaaaaao

2019/09/13 06:19

Y.H.さん 1000ステージごとではなく、1ステージごとに書きだすのを1000ステージ分です。 すいません、なおします
t_obara

2019/09/13 06:24

> Zuishinさん 確かに提示された内容を見るとそうですね。。 > tatsukiiiさん であれば、先頭にNodeである行を抜き出せば良いのですね フィールドはどのように区切るのでしょうか。画像だと何もわかりませんが。。
tiitoi

2019/09/13 06:26

とりあえずそのファイルをどこかにアップロードされてはどうでしょうか。 実際のファイルを確認できないことには誰も回答できないと思います。
aaaaaao

2019/09/13 06:33

t_obaraさん フィールドをカンマで区切りたいのですが、このデータが解析ソフトから直接出力されるもので、なかなかこのデータをいじることができないので困っています。 質問に質問で申し訳ありませんが、ID Reaction~ という文字列を見つけたらその下の行を読み込むということは可能なのでしょうか?
Y.H.

2019/09/13 06:36

> 1ステージごとに書きだすのを1000ステージ分 えーと、要件がよくわからないです。 ・結果は、1000ファイルになるということですか? 例:   0001.txt   0002.txt   0003.txt   ・・略・・   1000.txt ・1ステージとは何をもって判断しますか? 例:  " ID Reaction ・・・・" で始まり "Node 0000 ・・・・" が続き ・・・・ 空行で終わる
KojiDoi

2019/09/13 06:37

「画像の青くハイライトした部分」の定義をちゃんと言葉で定義してください。 素直に解釈すると、 「ID Reaction of Internal Forceの直後から空行までの間の行のうち、Node 1101で始まるものだけを出力したい」 と読めますが、これであっていますか。それとも別の何かですか。それを明らかにして初めて「まともな質問」だと思います。
aaaaaao

2019/09/13 06:38

tiitoiさん 載せたいのですが、全内容を載せることはできないので、この一部データでご勘弁ください
KojiDoi

2019/09/13 06:40

質問の内容があいまいなので皆困っているのに、次々内容を変えたり「質問を質問で返したり」するのは止めなさい。話を収束させる気はあるのですか?
Zuishin

2019/09/13 06:41

日本語で説明できないみたいだからデータよこせ俺が見るって言われてるんですよ。
coco_bauer

2019/09/13 06:41

質問を文章に起こして、それを知人や友人に読んでもらいましょう。 読んだ人から質問や「判らない」という感想が出たら、書き直しましょう。 少なくとも質問を読んだ人の75%が理解できる内容の文章が出来上がったら、改めて質問してください。 すぐに全く異なる内容に書き換えられる質問につきあうのは、嫌です!
aaaaaao

2019/09/13 06:43

Y.H.さん 1000ステージ分のデータを1ファイルにまとめたいです KojiDoiさん 「ID Reaction of Internal Forceの直後から空行までの間の行のうち、Node 1101で始まるものだけを出力したい」まさにその通りです
tiitoi

2019/09/13 06:45

> 全内容を載せることはできないので、この一部データでご勘弁ください csv と記載されていますが、提示されているファイルのフォーマットは csv でないため、ファイルの内容を確認する必要があります。 質問する上で必要となるデータは提示していただけないと回答できません。 ファイルを提示できないのであれば、こういうところで質問するのではなく、(会社なのか、研究室なのかわかりませんが)身内で解決してください。
Y.H.

2019/09/13 06:47

> Node 1101で始まるものだけ Node 1102で始まるものや Node 110など数字が3桁未満のものは不要ということでよいですか?
Zuishin

2019/09/13 06:50

一番最初の質問を見る限り、まだ隠された要件がありそうです。
aaaaaao

2019/09/13 06:51

Y.H.さん 詳しくいいますと、ID Reaction ~の中のNode 1101で始まるものだけです。
Y.H.

2019/09/13 06:56

> Node 1101で始まるものだけ Node 11010 など五桁ものも含まれますがそれでよいですか?
t_obara

2019/09/13 06:59

出力フォーマットを変換する必要がないのであれば、以下のような感じでしょうか。 ファイルを開き、1行ずつ読み、 所定の文字列があったら、次の行から抽出準備をし、 Node 1101が見つかったら実際に抽出をして、リストなどに保存 ファイル全て読み終わったら、リストをファイルに書き出す
aaaaaao

2019/09/13 07:03

Y.H.さん Node 1101のみデータがほしいです。
aaaaaao

2019/09/13 07:05 編集

t_obaraさん ファイルを開き、1行ずつ読み、 所定の文字列があったら、次の行から抽出準備をし、 Node 1101が見つかったら実際に抽出をして、リストなどに保存 ファイル全て読み終わったら、リストをファイルに書き出す はい、そうです。この内容のプログラムを教えていただきたかったのです。
Zuishin

2019/09/13 07:07

コーディングが全くできないということですかね。 始めたばかりと書いてるけど、本当は Python 使ったこともないから作ってくれということでしたか。 なるほど、コードが書いてある回答をすぐベストアンサーにした意味がわかりました。
Y.H.

2019/09/13 07:12

> Node の行の8フィールドまで (1) ID Reaction ~ の中のNode 1101のデータに9フィールド以上存在する場合はありますか? (2)ID Reaction ~ **以外**の中のNode 1101 のデータに8フィールドの物は存在しますか?
t_obara

2019/09/13 07:47

まずはファイルをコピーするプログラムを作ってみましょう。
guest

回答2

0

提示された例のように並んでいるのであれば、[b|c|d|][0-9]+といった正規表現で抽出すればよいかと思います。
.csvの読込、.txtへの出力はご自身で実装ください。

Python

1import itertools 2import re 3 4for s in ['{}{}'.format(s,n) for n,s in itertools.product(range(1,100), 'abcde')]: 5 if re.match('[b|c][0-9]+', s): 6 print(s) 7""" 8b1 9c1 10 : 11"""

投稿2019/09/13 05:01

編集2019/09/13 05:02
can110

総合スコア38266

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

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

aaaaaao

2019/09/13 05:09

ありがとうございます。 繰り返しの質問になり申しわけないのですが、この例のabcdeだけではなくもっと多くの文字が並んでいる場合の(range(1,100), 'abcde')]:の部分の記載方法を教えてください.
can110

2019/09/13 05:12

その部分は本筋ではないのですが、'abc(略)z'といった感じにしてください。 そして実際に動かしてみてください。
guest

0

質疑応答するより、勝手にサンプルコードを投げかけたほうが早そうだ。こういうことがしたいのかな。

awk

1# test.awk 2/Reaction of Internal Force/,/^$/{ 3 if($1=="Node" && $2== "1101"){print} 4}
awk -f test.awk input.txt

投稿2019/09/13 07:12

KojiDoi

総合スコア13671

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

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

Y.H.

2019/09/13 08:06 編集

あぁ… なんか頓珍漢なことほざいた自分に気が付いたので、コメント編集し無かったことにました。
KojiDoi

2019/09/13 07:23

質疑応答の内容を「素直に」コードにしてみました。仕様を言葉にしろと言っても無理なレベルのようなので、これをみてイエスとかノーとか言ってもらったほうが早いかなと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問