@KZ400 (Shoot You)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

テキストファイルの中身をCSVファイルに変換したい

解決したいこと

Yolov5を使って出力したテキストファイルの中身を”ラベル番号 中心X座標 中心Y座標 幅 高さ”という項目を追加してCSVファイルを作成するプログラムを教えてほしいです。

発生している問題・エラー

0 0.210317 0.51207 0.0535714 0.106812
0 0.711682 0.510086 0.0637401 0.114749
0 0.948661 0.523313 0.0545635 0.118056
0 0.12562 0.517196 0.0677083 0.113757
0 0.636037 0.517361 0.061756 0.116071
0 0.047247 0.51422 0.063244 0.111111
0 0.342262 0.517196 0.0615079 0.116402
0 0.888021 0.514716 0.0662202 0.121362
0 0.797619 0.50463 0.0644841 0.114418
0 0.271701 0.512897 0.062748 0.119048
0 0.416915 0.5167 0.0605159 0.109458
0 0.555184 0.518353 0.063244 0.109458
0 0.483259 0.52381 0.0602679 0.108466

Yolov5より出力したテキストファイルの中身です。

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

import numpy as np
import csv

file_path = "runs/detect/labels/img4.txt"

with open(file_path) as f:
    lines = f.read().split('\n')

lines = [line for line in lines if line.strip() != '']
add_list = [str("ラベル番号 中心X座標 中心Y座標 幅 高さ")]

new_list = add_list + lines
print(new_list)

自分で試したこと

テキストファイルの中身をリスト化し、そのリストに「”ラベル番号 中心X座標 中心Y座標 幅 高さ”」というリストを追加するまでは出来たのですが思ったものではないです。
是非、教えていただきたいです。

0 likes

4Answer

見た感じではスペース区切りなのでスペースをカンマに置き換えて書き写してあげればcsvになるのではと思います。

print(line.replace(" ", ","))
2Like

pandas を使ってtxtファイルを pandas.DataFrame として読み込み、
列ラベル (columns) になるであろう項目名を付けてCSVファイル出力するコードです。

import pandas as pd


def main() -> None:
    # pandas.DataFrameとしてファイルを読み込む
    # txtファイルにheaderに該当する行は無し (header=None)
    # 代わりに自分で名前をつける (names=[~])
    df = pd.read_csv(
        r".\runs\detect\labels\img4.txt",
        sep=" ",
        header=None,
        names=[
            "ラベル番号",
            "中心X座標",
            "中心Y座標",
            "",
            "高さ",
        ],
    )

    # CSVファイルとして出力 (pandas.DataFrameのindexは要らないのでFalse)
    df.to_csv(r".\runs\detect\labels\img4.csv", index=False)


if __name__ == "__main__":
    main()

2Like
echo "ラベル番号,中心X座標,中心Y座標,幅,高さ" > test.csv
awk  'gsub(/ /,",")' img4.txt >> test.csv

awk -v OFS=, '{print($1,$2,$3,$4,$5)}' img4.txt >> test.csv

awk -f code.awk img4.txt > test.csv

code.awk
BEGIN{
  FS=" "
  OFS=","
  print("ラベル番号,中心X座標,中心Y座標,幅,高さ")
}
{print($1,$2,$3,$4,$5)}
1Like

「テキストファイルを入力」→「ヘッダ行を付加し、項目の区切文字をカンマに変換」→「CSVファイルを出力」の流れになると思います。


BOM付きのUTF-8でCSVファイルを作成したい場合は、以下の記事が参考になります。

0Like

Your answer might help someone💌