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

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

詳細はこちら
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

680閲覧

特定行を置き換えたい

退会済みユーザー

退会済みユーザー

総合スコア0

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2019/10/30 01:29

編集2019/10/30 01:30

file1

1REMARK 1 2REMARK 3ATOM 1 4ATOM 3 5END

file2

1ATOM 4 2ATOM 2

file1のATOMの行をfile2のATOMの行に置換して

file3

1REMARK 1 2REMARK 3ATOM 4 4ATOM 2 5END

のようなファイルを作りたいです。

python

1path = file1 2f = open(path) 3list = f.readlines() 4f.close() 5 6path2 = file2 7f2 = open(path2) 8list2 = f2.readlines() 9f2.close() 10 11for line in list: 12 if line.startswith("ATOM "): 13 for line2 in list2: 14 fileobj = open("file3","a") 15 print >> fileobj, line2.rstrip() 16 fileobj.close() 17 else: 18 fileobj = open("file3","a") 19 print >> fileobj, line.rstrip() 20 fileobj.close() 21

というコードを組んでみたのですが、うまくいきません。

file1とfile2の"REMARK"や"ATOM"から始まる行の数は一定ではありません。

どなたかご教示お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記手順でどうでしょうか?

1.file2から「ATOM」で始まる行のリストを作る。
2.1のリストの中身があるときは、file1を行毎に調べて「ATOM」で始まる行であれば、1のリストから順に置き換える。
3.置き換えを実施した場合は、結果をファイルに出力する。

投稿2019/10/30 03:35

meg_

総合スコア10736

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

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

退会済みユーザー

退会済みユーザー

2019/10/31 05:16 編集

ありがとうございます! よく考えるとその前に行っていた処理を変えることでよりシンプルにできることに気づいたので、前の処理を変えて解決しました。 しかし、教えていただいた考え方はとても役立ちました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問