dinky-spike559
@dinky-spike559

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonでテキストファイルを処理したい。(python初心者)

pythonを使って物体検出について勉強をしています。

テキストファイルに何千行もの物体検出に用いる座標が書かれていて、これを1行取り出して一つのテキストファイルにしたいのですが、どういう処理をすればよいのでしょうか。

with open(train.txt) as f:
    lines = f.readlines()
a = lines

for i in a:
    file_path = 'a.txt'

with open(file_path, mode='w') as fa:
    fa.writelines(i)

readlinesでリストにして、そのあとfor文でリスト上の要素ひとつづつを処理するのかと思いましたができませんでした。
できませんでしたというより、自分の知識、経験不足で何も思い浮かばないというのが正しいです。
これを実行したら座標の最後の行だけ出力されてました。

また、train.txt の座標が何千行もあるファイルですが

x座標,y座標,高さ,幅  
x座標,y座標,高さ,幅 
x座標,y座標,高さ,幅  
x座標,y座標,高さ,幅  

・ 

のようになっていて,入っていました。

ご教授お願いします。

0

1Answer

テキストファイルに何千行もの物体検出に用いる座標が書かれていて、これを1行取り出して一つのテキストファイルにしたい
readlinesでリストにして、そのあとfor文でリスト上の要素ひとつづつを処理する

import os

out_dir = './output/'
os.makedirs(out_dir, exist_ok = True)

with open("points.txt") as f:
    for i, line in enumerate(f.readlines()):
        with open(os.path.join(out_dir, f"{i}.txt"), "w") as output:
            output.writelines(line) # 1行だけそのまま書き込み

本当であれば質問のテンプレにある「自分で試したこと」の欄に「できなかった」と言っているコードを載せていただきたいところです.

また,YOLOの形式は[oject-class] [x_center] [y_center] [width] [height]という形式で空白区切りで書かなければならないことは知られていますが,質問者さんの持っているテキストデータの書式が不明なため,どう加工すれば良いかわからないです.よって上のコードではそのままテキストファイルを1行ずつ別々のファイルに書き出すコードとしておきました.

ご自分でYOLOの形式に変換なさってみてください.

1Like

Comments

  1. @dinky-spike559

    Questioner

    qiita初心者だったため質問の仕方が悪くて申し訳ありません。
    修正いたしましたのでよろしくお願いします。
  2. @dinky-spike559

    Questioner

    実行したらできてました!本当にありがとうございます。感動しています。
    YOLO形式にするのは自分で何とか頑張ってみようと思います。

Your answer might help someone💌