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

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

詳細はこちら
Python 2.7

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

Q&A

解決済

4回答

1086閲覧

連続する行を削除したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 2.7

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

0グッド

0クリップ

投稿2019/11/27 09:54

編集2019/11/27 09:59

file1

1AAA 2BBB 3CCC 4DDD 5DDD 6DDD 7EEE 8FFF

このようなファイルがある時、DDDが連続しているので、2つ目と3つめのDDDを削除したいです。
連続する行に書かれている文字列はわかっています。

AAA BBB CCC DDD EEE FFF

python

1path = file1 2f = open(path) 3line = f.readlines() 4f.close() 5 6for list in line: 7 with open(path) as f: 8 next(f) 9 for line2 in f 10 if line2 == list:

このように、同じファイルの1行目とn+1行目を順に比較していこうとしました。
しかし、この方法だと、同じ行が2回以上連続している場合に対処できないことに気づき、行き詰まっています。

うまいやり方をご教示ください。
よろしくお願いします。

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

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

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

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

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

guest

回答4

0

Python

1from __future__ import print_function 2import sys 3 4if sys.version_info.major == 2: 5 from itertools import izip_longest as zip_longest 6else: 7 from itertools import zip_longest 8 9 10with open('file.txt') as fin: 11 src = fin.read().splitlines() 12 13dst = [ 14 l1 for l1, l2 in zip_longest(src, src[1:]) 15 if l1 != l2 16] 17print(*dst, sep='\n')

3.xでも2.7でも動作します。

評価を受けて

@低評価を付けた方
改めて回答を見直しましたが、低評価の理由に思い当たりませんでした。
改善する余地があるのであれば対応しますので、問題点をコメント頂けますか。

投稿2019/11/27 23:06

編集2019/11/28 11:22
LouiS0616

総合スコア35668

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

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

0

ベストアンサー

意味不明なコードですね。

lineにファイル全部を読み込み済みなので、for list in line:で、1行ずつ見ていきます。
で、前の行と同じだったら、出力をしない。
比較する対象である前の行は、前回のループで別の変数に覚えておく必要があります。

投稿2019/11/27 10:00

otn

総合スコア85886

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

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

退会済みユーザー

退会済みユーザー

2019/11/27 10:07

>比較する対象である前の行は、前回のループで別の変数に覚えておく必要があります。 この部分がどうすればいいのかわからないので、コードを示していただけないでしょうか?
otn

2019/11/27 10:10

old = list
退会済みユーザー

退会済みユーザー

2019/11/27 10:35

質問で書いたコードと教えていただいた考え方を元にできました。 少し考えればわかることでした。 ありがとうございます。
otn

2019/11/27 11:05 編集

old = None for list in line: →if list!= old: →→print(list) →old = list ですかね。list と line の名前が直感と逆な気がします。
guest

0

二番目の結果が求めているものでしょうか?

d.py

python3

1in_file = "data0.txt" 2out_file_1 ="data1.txt" 3out_file_2 ="data2.txt" 4 5with open(in_file, 'r') as f: 6 lines = f.readlines() 7 8lines_1 = sorted(list(set(lines)),key=lines.index) 9 10with open(out_file_1, 'w') as f: 11 for line in lines_1: 12 f.write(line) 13 14lines_2 = [] 15for line in lines: 16 if lines_2 == [] or lines_2[-1] != line: 17 lines_2.append(line) 18 19with open(out_file_2, 'w') as f: 20 for line in lines_2: 21 f.write(line)

実行結果例
イメージ説明

参考情報

  • listをuniqueにする方法【重複要素の削除】

https://lanchesters.site/python-list-uniq/

投稿2019/11/30 01:12

katoy

総合スコア22324

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

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

0

参考情報

  • Pythonでリスト(配列)から重複した要素を削除・抽出

https://note.nkmk.me/python-list-unique-duplicate/

投稿2019/11/27 14:48

katoy

総合スコア22324

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

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

otn

2019/11/27 15:21

重複じゃなくて連続の話なので、そのままでは使えない気がします。
katoy

2019/11/27 15:37

あ、 そうですね。 地道に前行と比較していくしかない?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問