タイトルにある
csvファイル
とは、スペースをデリミタとした character-separated values をデータ行とするファイルという意味と解釈しました。
とりあえず、半角スペース1個をデリミタとするCSV(Character Separated Value)ファイルをoutputB.csv
として作るには、以下でよいかと。
(※ファイルをオープンできない場合のエラー対応は省略しています)
python3
1f_in = open('outputA.txt')
2f_out = open('outputB.csv', 'w')
3
4csv = []
5line_counter = 0
6
7for line in f_in:
8 if line_counter == 0:
9 f_out.write(line)
10 else:
11 csv.append(line.strip())
12 if line_counter % 4 == 0:
13 f_out.write(' '.join(csv))
14 f_out.write('\n')
15 csv = []
16 line_counter += 1
17
18
19f_out.close()
20f_in.close()
備考1
何らかのドキュメントの中で、そのドキュメントの文脈の中でCSV
とは、区切りをカンマに限定せず、何らかのデリミタ文字による区切りのほうの Character Separated Value を表しているということを明記しているものの例を探すと、以下のようなものがありました。
ただし、一般的には CSV と言われると、デリミタについて特に何の言及もない場合は、デリミタはカンマであると想定する、すなわちCSVのCは、Commmaの略であることを暗黙の了解とするのが通例です。
備考2
tatsu4941さんへ
-
質問のタイトルが、「テキストファイルをcsvファイルに変換したい」というものだったので、上記の回答は 質問のタイトルどおり、(デリミタがカンマ以外もあり得るという意味で広義の)CSVファイルを出力することを最優先にしています。
-
デリミタをスペース1個にしたのは、入力ファイルのデータ行に 10 30
や 0.031592 0.047514
といった、スペース1個区切りの行が元からあるので、これを踏襲したものです。
-
ちなみに上記で回答したコードによって出力された、スペース1個区切りのCSVファイルoutputB.csv
を質問にあるような、各列を何らかの桁数で揃えたテキストを得るのは、プログラムを書かなくても awk
というコマンドを使えばできます。
shell
1$ awk '{printf "%2s %2s %-2s %-8s %-8s %-8s\n", $1, $2, $3, $4, $5, $6}' outputB.csv | head -5
2SZ VZ VA LAD BRF_toc BRF_toa
310 30 0 0.004976 0.076048 0.080558
410 30 0 0.04976 0.071202 0.075713
510 30 0 0.2488 0.057755 0.066864
610 30 0 0.4976 0.046093 0.058653
awk
も便利なのでちょっとお調べになってみるとよいかもしれません。
備考3
質問にある google drive にあるファイルをダウンロードして outputA.txt
というファイルに保存してテキストエディタ(vi)で開いてみると、以下のようになっています。
これを見るに、^M
は \r
(キャリッジリターン)ですので、元々、outputA.txt
はスペース1個をデリミタとするCSVにしようとして、し損なっているかのようにも思えました。とまれ、現状は上記のようになっているので、\r
を削除すれば、スペース1個区切りのCSVになります。それには、Pythonでプログラムを書かなくても sed
コマンドで可能です。
shell
1$ sed -e "s/\r//g" outputA.txt | head -5
2SZ VZ VA LAD BRF_toc BRF_toa
310 30 0 0.004976 0.076048 0.080558
410 30 0 0.04976 0.071202 0.075713
510 30 0 0.2488 0.057755 0.066864
610 30 0 0.4976 0.046093 0.058653
または、先ほどのawk
を使って桁をそろえると、以下のようになります。
shell
1$ sed -e "s/\r//g" outputA.txt | awk '{printf "%2s %2s %-2s %-8s %-8s %-8s\n", $1, $2, $3, $4, $5, $6}' | head -5
2SZ VZ VA LAD BRF_toc BRF_toa
310 30 0 0.004976 0.076048 0.080558
410 30 0 0.04976 0.071202 0.075713
510 30 0 0.2488 0.057755 0.066864
610 30 0 0.4976 0.046093 0.058653