下記のようなテキストをpythonにて読み込んでいます。
txt
1#####!!!!!(AAAAAAA-BBBBBB) TITLE!!!!!##### 2 3#####*****Big Item1*****#####Duration:10min 4###---Small Item1aaaa---### 5#comment 6aaaaa 7bbbbb 8 9###---Small Item1bbb---### 10aaaaa 11bbbbb 12ccccc 13 14#####*****Big Item2*****#####Duration:20min 15###---Small Item1ccc---### 16aaaaa 17bbbbb 18 19###---Small Item1ddd---### 20aaaaa 21bbbbb 22ccccc 23 24 25#####*****Big Item3*****#####Duration:20min 26###---Small Item1xxx---### 27aaaaa 28bbbbb 29 30###---Small Item1yyy---### 31aaaaa 32bbbbb 33ccccc 34 35###---Small Item1zzz---### 36aaaaa 37bbbbb 38ccccc
pythonのコードは下記のようになっております。
python
1xxx = test.txt 2 3#行数を取得 4row_all = (sum([1 for _ in open(xxx)])) 5 6fileobj = open(xxx, "r", encoding="utf_8") 7bigtitle_count = 1 8sheet3_bigtitle_count = 34 9holder = {} 10 11for r in range(row_all): 12 line = fileobj.readline() 13 #先頭に#がある行を探す 14 if line.startswith('#'): 15 #タイトルを探しxxの設定 16 if m := re.search('#####!!!!!(.*)(.*)!!!!!#####', line): 17 s= m.groups()[0] 18 w = s.replace(" ", "") 19 20 #大項目を探し、セルの設定 21 elif line.startswith('#####*****'): 22 s = line.replace("#####*****", "") 23 w = s.replace("*****#####", "") 24 t = s.replace("*****#####", "") 25 26 #大項目名のみ取り出し 27 target1 = 'Duration' 28 idx1 = t.find(target1) 29 u = t[:idx1] 30 #print (u) 31 32 #Duration時間取得 33 target2 = ':' 34 idx2 = w.find(target2) 35 x = w[idx2+1:] 36 v = x.replace("min", "") 37 #print (v) 38 39 #シート4へ 40 sheet4.cell(row=1 + r, column=2).value = u 41 sheet4.cell(row=1 + r, column=2).font = Font(size=16,name='MS ゴシック',bold=True) 42 #シート3へ 43 sheet3.cell(row=0 + sheet3_bigtitle_count, column=7).value = u 44 sheet3.cell(row=0 + sheet3_bigtitle_count, column=7).font = Font(size=10,name='Arial',bold=True) 45 46 47 #大項目の下に罫線を挿入 48 bigtitle_border = Border(bottom=side) 49 for c in range(1,12): 50 sheet4.cell(row=1 + r, column=0 + c).border = bigtitle_border 51 #大項目番号を挿入 52 bigtitle_count+=1 53 sheet4.cell(row=1 + r, column=1).value = bigtitle_count 54 sheet4.cell(row=1 + r, column=1).font = Font(size=16,name='MS ゴシック',bold=True) 55 sheet4.cell(row=1 + r, column=1).alignment = Alignment(horizontal='left', vertical = 'center') 56 57 #シート3へ番号 58 sheet3.cell(row=1 + sheet3_bigtitle_count, column=3).value = bigtitle_count 59 sheet3.cell(row=1 + sheet3_bigtitle_count, column=3).font = Font(size=11,name='Arial') 60 61 62 sheet3_bigtitle_count+=2 63 holder.setdefault(sheet3_bigtitle_count,[]) 64 #小項目 65 elif line.startswith('###---'): 66 x = line.lstrip("#") 67 sheet4.cell(row=1 + r, column=2).value = x 68 holder[sheet3_bigtitle_count].append(x) 69 y = str(bigtitle_count) + '-' 70 print (y) 71 72 73 74 #その他コメント 先頭にある#のみ消す 75 elif line.startswith('#'): 76 x = line.lstrip("#") 77 sheet4.cell(row=1 + r, column=2).value = x 78 79 else: 80 sheet4.cell(row=1 + r, column=3).value = line 81 82wb.save(save_name)
エクセルには下記の画像のように書き込まれます。
#シート4
(シート3の出力結果については本質問と関係ないので割愛させていただきます)
コード内#小項目のprint(y)で
2-
2-
3-
3-
4-
4-
4-
と出力されるのを確認しています。
これに小項目の番号を下記のように付与したいと思っています。
2-1
2-2
3-1
3-2
4-1
4-2
4-3
完成イメージは下記になります。(A列に小項目項番が書き込まれています。)
このような番号付与の方法をお教えいただきたく思います。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。