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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

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

Q&A

解決済

1回答

465閲覧

連番でないところに空行を挿入する

退会済みユーザー

退会済みユーザー

総合スコア0

Python 2.7

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

0グッド

0クリップ

投稿2019/06/11 03:07

編集2019/06/11 03:10

以前にも質問して、なんとか自分でやっていましたが、どうしてもうまくいかず、再度質問させていただきます。

file1

11 aaa 1 22 bbb 2 33 ccc 3 44 ddd 4 55 eee 6 66 fff 7 77 ggg 10 8 9``` 10のようなファイルがあり、3列目の数字が連続していないところには差分の空行をいれたいです。 11例えば"fff 7"と"ggg 10"には2行分の空行をいれたいです。 12 13```file2(理想型) 14aaa 1 15bbb 2 16ccc 3 17ddd 4 18(空行) 19eee 6 20fff 7 21(空行) 22(空行) 23ggg 10 24 25``` 26そこでこのようなコードを組んでみました。 27 28```python2 29import sys 30 31path = 'file1' 32f = open(path) 33f2 = open(path) 34list = f.readlines()          #file1を1行目から読む 35list2 = f2.readlines()[1:]     #file1を2行目から読む 36f.close() 37f2.close() 38 39for (line, line2) in zip(list, list2): 40 slice = line[8:9]      #3列目の数字を抜きだし 41 slice2 = line2[8:9] 42 diff = int(slice2) - int(slice) 43 44 num = line[0:1]           #行数を抜きだし 45 if diff != 1:           #3列目が連続していないときのみ処理 46 start_pos = int(num) 47 empty_lines = int(diff) - 2 48 count = 0 49 while True: 50 line = sys.stdin.readline() 51 if line == '': 52 break 53 count += 1 54 sys.stdout.write(line) 55 if count == start_pos: 56 print '\n' * empty_lines 57 58``` 59この結果、 60 61```ここに言語を入力 62aaa 1 63bbb 2 64ccc 3 65ddd 4 66(空行) 67eee 6 68fff 7 69ggg 10 70``` 71 72空行を入れたい部分の最初の方だけ必要な数の空行をいれることには成功しました。 73 74しかし、2つめ以降には空行をいれることができません。 75 76このコードをどう直せばいいのかご教示いただけないでしょうか。 77全く別のコードを提示していただいても構いません。 78よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

collections.defaultdictを使って、欠番部分を空文字として扱う方法です。

Python

1import collections 2import sys 3 4 5dct = collections.defaultdict(str) 6for line in map(str.rstrip, sys.stdin): 7 num = int(line.split()[-1]) 8 dct[num] = line 9 10for i in range(1, num+1): 11 print(dct[i])

実行結果 Wandbox

1 aaa 1 2 bbb 2 3 ccc 3 4 ddd 4 5 eee 6 6 fff 7 7 ggg 10

上記のコードはPython3.xを意識したものですが、2.7環境でも動作します。

Pythonのバージョンについて

Python2.7は、2020年元日にサポートが打ち切られます。
いわば消費期限が切れるまで、半年を残すだけになっています。Python 2.7 Countdown

特段の事情が無いのであれば、Python3.xに乗り換えることを強く推奨します。

投稿2019/06/11 03:21

編集2019/06/11 03:22
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2019/06/11 04:04

ありがとうございます! うまくいきました! また、pythonのバージョンは管理者と相談して考えます。 お伝えいただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問