##やりたいこと
input.txt のIMG_◯◯.jpg以下の部分をIMG_〇〇.txtというファイルを作ってそこに書き込みたい。
IMG_◯◯.jpg以下の部分は必要に応じて書き換え作業を行っているがその部分はおそらく大丈夫なので、そこの部分の記述は無視してもらっても大丈夫です。
↓今回書いたコード
main.py
1import os 2 3INPUT_TXT = "input.txt" 4OUTPUT_DIR = "outputs" 5 6HEIGHT = 3744 7WIDTH = 5616 8 9CATEGORY_TO_NUM = { 10 "b": 0, 11 "n": 1, 12 "u": 2 13} 14 15with open(INPUT_TXT) as f: 16 lines = f.readlines() 17 18outputs = {} 19current_key = '' 20 21for line in lines: 22 if line.startswith("IMG_"): 23 outputs[line] = [] 24 current_key = line 25 else: 26 splited = line.split(",") 27 x = int(splited[0]) 28 y = int(splited[1]) 29 w = int(splited[2]) 30 h = int(splited[3]) 31 c = CATEGORY_TO_NUM[splited[4].strip()] 32 33 x_center = x + w / 2 34 y_center = y + h / 2 35 36 x_center /= WIDTH 37 y_center /= HEIGHT 38 w /= WIDTH 39 h /= HEIGHT 40 41 output_s = f"{c} {x_center} {y_center} {w} {h}" 42 outputs[current_key].append(output_s) 43 44for key, value in outputs.items(): 45 output_fname = f"{os.path.splitext(key)[0]}.txt" 46 #output_fname = key.replace("jpg", "txt") 47 with open(os.path.join(OUTPUT_DIR, output_fname), mode='w') as f: 48 f.write('\n'.join(value))
↓input.txt
input.txt
1IMG_2012-09-26T09-00-01.jpg 24640,3132,17,15,u 34882,3158,16,24,u 4707,3273,23,19,u 5IMG_2012-09-26T09-00-03.jpg 65218,3156,32,24,b 7IMG_2012-09-26T09-00-05.jpg 85528,3106,38,27,b 94139,3164,28,21,b 10691,3258,35,19,b 11516,3319,21,28,b 125272,3146,31,29,b 13IMG_2012-09-26T09-00-07.jpg 145552,3140,29,15,b 151167,3164,40,25,u 16IMG_2012-09-26T09-00-09.jpg 171958,2622,20,16,b 18543,3316,36,23,b 19795,3248,44,23,b 20IMG_2012-09-26T09-00-11.jpg 213394,2160,32,22,b 22784,3236,20,16,b
#エラーメッセージ
Traceback (most recent call last): File "main.py", line 48, in <module> with open(os.path.join(OUTPUT_DIR, output_fname), mode='w') as f: FileNotFoundError: [Errno 2] No such file or directory: 'outputs/IMG_2012-09-26T09-00-01.txt\n'
存在しないファイルに書き込もうとしているためエラーが起こってしまっているのだと思いますが、ファイルが存在しない場合はあたらしくファイルを作って書き込むにはどうしたら良いでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/21 04:11 編集