格式化文本文件

时间:2011-10-20 08:15:54

标签: regex csv formatting string-formatting libreoffice

我有一个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

4 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:1)

这就是你想要的吗?

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

如果您希望输出格式看起来更好,并且安装了“列”,您也可以尝试:

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

答案 2 :(得分: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()

答案 3 :(得分:0)

最简单的方法是使用固定宽度导入,如tohuwawohu建议 感谢

如果不将其转换为以逗号分隔的文件,只需将文件扩展名更改为.csv即可访问csv导入选项(也许您应手动删除“标题”部分,以便只有列标题和数据行仍然存在)。之后,您可以尝试使用空格作为列分隔符,甚至更容易:选择“固定宽度”并手动设置列。 - tohuwawohu 10月20日9:23