2011-10-20 74 views
0

我有一个我想改变的txt文件,所以我将能够将数据放入列中,参见下面的示例。这是因为我可以将这些数据导入数据库/数组并对它们进行计算。我试图将数据导入/粘贴到LibreCalc中,但它只是将所有内容导入到一列中,或者它在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 10月20日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

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()