2011-10-20 9 views
0

私は変更したいtxtファイルを持っているので、データを列に配置することができます(下の例を参照)。この背後にある理由は、私はこのデータをデータベース/配列にインポートし、それらの計算を実行できるからです。私はLibreCalcにデータをインポート/ペーストしようとしましたが、すべてを1つのカラムにインポートするか、LibreWriterでファイルを開きます。私はubuntu 10.04を使用しています。何か案は?私はこの問題を回避するために別のプログラムを使用するつもりです。カンマで区切られたファイルで作業することもできますが、データを自動的にその形式に変換する方法はわかりません。テキストファイルを作成する

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

ここにはフルファイルへのリンクがあります。 pt.txt file

+0

ファイルには6つのデータ列がありますが、ヘッダーは5つしかありません。あれは正しいですか? 「PT II、9356-97630」は分類ですか?また、「9356-97630」のスペースは正しいですか? –

+1

ファイルをカンマ区切りのファイルに変換せずに、単にファイル拡張子を.csvに変更するだけでcsvインポートオプションにアクセスできます(ヘッダー部分を手動で削除して、ヘッダーとデータ行だけで残り)。その後、空白を列デリミタとして使用することもできますし、「固定幅」を選択して手動で列を設定することもできます。 – tohuwawohu

答えて

0

最も簡単な方法は、tohuwawohuが おかげ

を示唆したように、カンマ区切りのファイルに変換せずに一定の幅を使用してインポートすることが判明し、あなたは、単にファイルを変更することにより、CSVインポートオプションにアクセスすることができました.csvへの拡張(おそらく、ヘッダー部分を手動で削除して、列ヘッダーとデータ行だけが残るようにする必要があります)。その後、空白を列デリミタとして使用することもできますし、「固定幅」を選択して手動で列を設定することもできます。 - tohuwawohu Oct 20 at 9:23

1

これは何ですか?

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

あなたは、出力形式が良く見える、とあなたは "列" がインストールされている場合は、あなたもこれを試すことができます。

awk 'BEGIN{OFS=", "}NF>1{$1=$1;print}' pt.txt|column -t 
2

はこのお試しください:

sed -e "s/(\s+)/,$1/g" pt.txt 
+0

私はこのsed -e "s /(\ s +)/、$ 1/g" pt.txt> pt2.txtを試して、カンマなしで同じファイルを取得します。これを間違って入力しましたか? –

+0

'$ 1'の前に\を入れてみましょう:' s /(\ s +)/、\ $ 1/g' –

0

awkをし、 sedワンライナーはクールですが、ファイルを分割する以上のことをする必要があると思います。もしあなたがそうしていれば、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() 
関連する問題