2011-10-20 4 views
0

데이터를 열에 배치 할 수 있도록 변경할 텍스트 파일이 있습니다. 아래 예제를 참조하십시오. 이 배후의 이유는이 데이터를 데이터베이스/배열로 가져 와서 계산을 수행 할 수 있기 때문입니다. 가져 오기/데이터를 LibreCalc에 붙여 넣으려고했지만 한 열로 모든 것을 가져 오거나 LibreWriter에서 파일을 엽니 다. 우분투 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|column -t 
2

이 시도 : 당신은 출력 형식이 좋아 보이는, 그리고 당신이 "열"이 원하는 경우

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

설치, 당신도이 시도 할 수

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

awksed 한 줄짜리는 시원하지만, 단순히 파일을 나누는 것 이상의 일을 할 필요가 있습니다. 파이썬 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()