Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。
Q&A
解決済
4回答
1062閲覧
総合スコア1
0グッド
0クリップ
投稿2021/01/29 00:36
0
pythonについての質問です。 以下のようなテキストファイルがあるとします。
テキスト1 テキスト2 正常終了 テキスト3 テキスト4 正常終了 テキスト5 テキスト6 エラー発生
テキストファイル全体を取得し、"エラー発生"という文字を発見した場合は"テキスト5"と"テキスト6"だけを抽出したいのですが、どういうやり方をすれば実現できるでしょうか? よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
質問へのコメント
回答4件
1.readlines()でファイル全体をリストに読み込む 2.forでリストの添え字を変化させながら"エラー発生" in リスト要素で文字列を探し 3.見つかった添え字-1と-2のリスト要素が対象行
readlines()
for
"エラー発生" in リスト要素
1行目や2行目に「エラー発生」があるケースがあるなら、添え字が範囲オーバーとならないような考慮も必要です。
grepコマンドが使えれば、grep -B2 エラー発生 ファイル名と一発ですが。
grep
grep -B2 エラー発生 ファイル名
投稿2021/01/29 00:50
総合スコア86461
回答へのコメント
2021/01/29 04:48
Pandas使っていいなら
python1import pandas as pd 2 3text = """テキスト1 4テキスト2 5正常終了 6テキスト3 7テキスト4 8正常終了 9テキスト5 10テキスト6 11エラー発生""" 12 13df = pd.DataFrame(text.splitlines()) 14 15df["処理"] = df[0].where(df[0].isin(["正常終了", "エラー発生"])).fillna(method="bfill") 16 17df[(df["処理"] == "エラー発生") & (df[0] != "エラー発生")][0].to_list()
python
1import pandas as pd 2 3text = """テキスト1 4テキスト2 5正常終了 6テキスト3 7テキスト4 8正常終了 9テキスト5 10テキスト6 11エラー発生""" 12 13df = pd.DataFrame(text.splitlines()) 14 15df["処理"] = df[0].where(df[0].isin(["正常終了", "エラー発生"])).fillna(method="bfill") 16 17df[(df["処理"] == "エラー発生") & (df[0] != "エラー発生")][0].to_list()
投稿2021/01/29 01:43
総合スコア1286
サンプルコード。
def main(): data = [] with open('text.txt', mode='r', encoding='utf-8') as f: for line in f: tmp = line.split('\n')[0] if tmp == '正常終了': data = [] elif tmp == 'エラー発生': print('\n'.join(data)) else: data.append(tmp) if __name__ == '__main__': main()
投稿2021/01/29 01:14
総合スコア230
ベストアンサー
こんなもんでどうでしょう
#いろいろ修正
投稿2021/01/29 00:55
総合スコア88186
2021/01/29 04:46 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.29%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
Pythonテキストファイルから特定の行を取得
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/29 04:48