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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

201閲覧

テキストファイルから IDとコメントを任意書式で結合したい

Untitled_Sample

総合スコア192

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/27 13:26

編集2018/06/27 13:28

ABCDから ABCDまで
""で囲まれた部分を「ABCDより下記」の日付と結合する

# test.txt """ ABCF010 "My001天気" 2011/01/01 2011/02/01 2010/03/01 ABCD0220 "晴れの天気" 2011/05/08 2012/06/26 2010/08/28 """

#望む結果

2010/03/01,ABCF010,"My天気" 2011/01/01,ABCF010,"My天気" 2011/02/01,ABCF010,"My天気" 2010/08/28,ABCD0220, "晴れの天気" 2011/05/08,ABCD0220, "晴れの天気" 2012/06/26,ABCD0220, "晴れの天気"

#現状のコード

python

1 2""" 3# ファイル読み込み 4f = open('test.txt') 5l = f.read().split() 6f.close() 7""" 8 9# 読みんで完成するリスト 10l=['2010/03/01,ABCF010,"My天気"', '2011/01/01,ABCF010,"My天気"', '2011/02/01,ABCF010,"My天気"', '2010/08/28,ABCD0220,', '"晴れの天気"', '2011/05/08,ABCD0220,', '"晴れの天気"', '2012/06/26,ABCD0220,', '"晴れの天気"'] 11 12 13 14r=[] 15# 'キーワドとindexの取得 16for k,v in enumerate(l): 17 if '"' in v: 18 r.append(k) 19 20 21F=0 22for k,v in enumerate(l): 23 if k==r[0] or k==r[1]: 24 F+=1 25 if k==r[0] or k==r[0]-1 or k==r[1] or k==[1]-1 or '"' in v: 26 continue 27 28 # キーワドの1つ前が要素なので、index-1 29 if F==1: 30 print(v+','+l[r[0]-1]+','+l[r[0]]) 31 if F==2: 32 print(v+','+l[r[1]-1]+','+l[r[1]]) 33 34 35

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1data = """ 2ABCF010 3 "My001天気" 4 2011/01/01 2011/02/01 2010/03/01 5 6 7ABCD0220 8 "晴れの天気" 9 2011/05/08 2012/06/26 10 2010/08/28 11 12 13""" 14 15 16def parse(data): 17 lines = (s for s in map(str.strip, data.splitlines()) if s) 18 for line in lines: 19 if line.startswith('ABC'): 20 key, value = line, None 21 elif not value: 22 value = line 23 else: 24 yield from ((t, key, value) for t in line.split()) 25 26 27print(*map(','.join, parse(data)), sep='\n')

追記: parseをもっと読みやすく

python

1def parse(data): 2 for line in map(str.strip, data.splitlines()): 3 if not line: 4 pass 5 elif line.startswith('ABC'): 6 key, value = line, None 7 elif not value: 8 value = line 9 else: 10 yield from ((t, key, value) for t in line.split())

投稿2018/06/27 14:45

編集2018/06/27 15:00
YouheiSakurai

総合スコア6142

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問