0

データを列に配置できるように変更したいtxtファイルがあります。以下の例を参照してください。この背後にある理由は、このデータをデータベース/配列にインポートして計算を実行できるようにするためです。データをLibreCalcにインポート/貼り付けしようとしましたが、すべてを1つの列にインポートするか、ubuntu10.04を使用しているLibreWriterでファイルを開きます。何か案は?この問題を回避するために、別のプログラムを使用したいと思います。カンマ区切りのファイルで作業することもできますが、データをその形式に自動的に変換する方法がわかりません。

Trying to get this:
WAVELENGTH,   WAVENUMBER,   INTENSITY,    CLASSIFICATION,     CODE,
1132.8322,    88274.326,     2300,        PT II,   9356- 97630,       05,

これが完全なファイルへのリンクです。 pt.txtファイル

4

4 に答える 4

2

これを試して:

sed -e "s/(\s+)/,$1/g" pt.txt
于 2011-10-20T08:32:29.083 に答える
1

これは、あなたの望むことですか?

awk 'BEGIN{OFS=","}NF>1{$1=$1;print}' pt.txt

出力形式の見栄えを良くし、「列」をインストールしている場合は、これも試すことができます。

awk 'BEGIN{OFS=", "}NF>1{$1=$1;print}' pt.txt|column -t
于 2011-10-20T08:22:51.133 に答える
0

awksedワンライナーはかっこいいですが、単にファイルを分割する以上のことをする必要があると思います。もしそうなら、そしてあなたがPython 2.7にアクセスできるなら、次の小さなスクリプトがあなたを動かすでしょう。

# -*- coding: utf-8 -*-

"""Convert to comma-delimited"""

import csv
from os import path
import re
import sys


def splitline(line):
    return re.split('\s{2,}', line)


def main():
    srcpath = path.abspath(sys.argv[1])
    targetpath = path.splitext(srcpath)[0] + '.csv'

    with open(srcpath) as infile, open(targetpath, 'w') as outfile:
        writer = csv.writer(outfile)
        for line in infile:
            if line.startswith('  '):
                line = line.strip()
                cols = splitline(line)
                writer.writerow(cols)


if __name__ == '__main__':
    main()
于 2011-10-20T09:11:35.550 に答える
0

tohuwawohuが提案したような固定幅を使用してインポートするのが最も簡単な方法であることが判明しましたありがとう

カンマ区切りのファイルに変換せずに、ファイル拡張子を.csvに変更するだけでcsvインポートオプションにアクセスできます(「ヘッダー」部分を手動で削除して、列の見出しとデータ行のみが残るようにする必要があります)。 )。その後、空白を列の区切り文字として使用するか、さらに簡単に使用できます。「固定幅」を選択して、列を手動で設定します。–tohuwawohu10月20日9:23

于 2011-10-23T21:04:34.290 に答える