Regex 格式化文本文件

Regex 格式化文本文件,regex,csv,formatting,string-formatting,libreoffice,Regex,Csv,Formatting,String Formatting,Libreoffice,我有一个txt文件,我想修改它,这样我就可以将数据放入列中,见下面的示例。这背后的原因是,我可以将这些数据导入数据库/数组并对其执行计算。我尝试将数据导入/粘贴到LibreCalc中,但它只是将所有内容导入到一列中,或者在LibreWriter中打开文件,我使用的是ubuntu 10.04。有什么想法吗?我愿意使用另一个程序来解决这个问题。我也可以使用逗号分隔的文件,但我不确定如何将数据自动转换为该格式 Trying to get this: WAVELENGTH, WAVENUMBER,

我有一个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,
这里有一个完整文件的链接。 这就是你想要的吗

awk 'BEGIN{OFS=","}NF>1{$1=$1;print}' pt.txt
如果希望输出格式看起来更好,并且安装了“column”,也可以尝试以下方法:

awk 'BEGIN{OFS=", "}NF>1{$1=$1;print}' pt.txt|column -t
这是你想要的吗

awk 'BEGIN{OFS=","}NF>1{$1=$1;print}' pt.txt
如果希望输出格式看起来更好,并且安装了“column”,也可以尝试以下方法:

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

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

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

awk
sed
一行程序很酷,但我希望您最终需要做的不仅仅是拆分文件。如果您这样做了,并且您可以访问Python2.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()

awk
sed
一行程序很酷,但我希望您最终需要做的不仅仅是拆分文件。如果您这样做了,并且您可以访问Python2.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()

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


无需将其转换为逗号分隔的文件,只需将文件扩展名更改为.csv即可访问csv导入选项(也许您应该手动删除“标题”部分,以便只保留列标题和数据行)。之后,您可以尝试使用空格作为列分隔符,甚至更简单:选择“固定宽度”并手动设置列tohuwawohu 10月20日9:23时,最简单的方法是使用tohuwawohu建议的固定宽度导入 谢谢


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

该文件似乎有6个数据列,但只有5个标题。对吗?“PT II,9356-97630”是分类吗?此外,“9356-97630”中的空格是否正确?如果不将其转换为逗号分隔的文件,只需将文件扩展名更改为.csv即可访问csv导入选项(也许您应该手动删除“标题”部分,以便只保留列标题和数据行)。之后,您可以尝试使用空格作为列分隔符,甚至更简单:选择“固定宽度”并手动设置列。该文件似乎有6个数据列,但只有5个标题。对吗?“PT II,9356-97630”是分类吗?此外,“9356-97630”中的空格是否正确?如果不将其转换为逗号分隔的文件,只需将文件扩展名更改为.csv即可访问csv导入选项(也许您应该手动删除“标题”部分,以便只保留列标题和数据行)。之后,您可以尝试使用空格作为列分隔符,甚至更简单:选择“fixed width”并手动设置列。我打错了吗?试着在
$1
之前放一个\像这样:
s/(\s+)/,\$1/g
我试过这个sed-e“s/(\s+)/,$1/g”pt.txt>pt2.txt,得到的文件没有逗号。我打错了吗?试着在
$1
前面加一个\号,比如:
s/(\s+)/,\$1/g