前提・実現したいこと
下の「tekitou」のようなファイルを、一行ずつスペースで区切った形でさらに3行ごとにリストに入れるというプログラムを作りたいと思っています。
tekitou
1あ,い,う,え 2か,き,く,け 3こ,, 4た,ち,,つ 5な,に,ぬ,ね 6は,ひ,ふ,へ 7ま,み,む,
実現したい、リストをprintしたときの出力結果のイメージは以下の通りです。
['あ,い,う,え か,き,く,け こ,,', 'た,ち,,つ な,に,ぬ,ね は,ひ,ふ,へ', 'ま,み,む']
見辛いかもしれませんが、
「え」と「か」の間、「け」と「こ」の間、「つ」と「な」の間、「ね」と「は」の間がスペースで区切られており、また、
「あ」〜「こ,,」、「た」〜「へ」、「ま」〜「む」がそれぞれ別要素として扱われています。
発生している問題・エラーメッセージ
そして、実際に先の内容を実現するため、以下のようなプログラムを作成してみました。
Python3
1# coding: UTF-8 2 3#ライブラリをインポート 4import codecs 5 6#tekitouLogのログをスペース区切り3行ごとを配列に突っ込む方法を模索するプログラム 7 8f_in = codecs.open('tekitou.txt', 'r', 'utf-8')#実験用のログのファイルをutf-8で読み込み 9 10lines = f_in.readlines() #読み込み 11lines2 = [] #空のリストを用意 12 13count = 0 #行数をカウントするための変数 14 15threeline = "" #配列の要素を一時的に入れる変数 16 17for line in lines: 18 count += 1 #行数をカウント 19 text = line.replace("\n","") #\n除去 20 if count%3 != 0: #行数が3の倍数じゃなかった場合 21 threeline += text #1行分をキープ 22 threeline += ' ' #スペースを入れる 23 elif count%3 ==0: #行数が3の倍数だった場合 24 threeline += line #1行分をキープ 25 lines2.append(threeline) #3行溜まったのでリストに追加 26 threeline = "" #変数の中身をリセット 27 28else: 29 f_in.close() 30 31print(lines2) #配列の中身を出力
しかし、これを実行すると、
['あ,い,う,え か,き,く,け こ,,', 'た,ち,,つ な,に,ぬ,ね は,ひ,ふ,へ']
のように、3行に入れず余った「ま,み,む」がリストに入りませんでした。
どのようにプログラムを組めば3行に入らず余ったものも含めた形でリストを作ることができるでしょうか。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/02 13:22