Форматирование текстового файла - PullRequest
0 голосов
/ 20 октября 2011

У меня есть текстовый файл, который я хотел бы изменить, чтобы я мог разместить данные в столбцах, см. Пример ниже. Причина этого в том, что я могу импортировать эти данные в базу данных / массив и выполнять вычисления на них. Я попытался импортировать / вставить данные в 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

Ответы [ 4 ]

2 голосов
/ 20 октября 2011

Попробуйте это:

sed -e "s/(\s+)/,$1/g" pt.txt
1 голос
/ 20 октября 2011

это то, что вы хотите?

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

если вы хотите, чтобы выходной формат выглядел лучше, и у вас установлена ​​«колонка», вы можете попробовать это тоже:

0 голосов
/ 24 октября 2011

Оказалось, что самым простым способом импорта был импорт с использованием фиксированной ширины, как предложил tohuwawohu. Спасибо

Не преобразовывая его в файл с разделителями-запятыми, вы можете получить доступ к параметрам импорта csv, просто изменив расширение файла на.csv (возможно, вам следует удалить часть «заголовка» вручную, чтобы остались только заголовки столбцов и строки данных).После этого вы можете попробовать использовать пробел в качестве разделителя столбцов, или даже проще: выберите «фиксированная ширина» и установите столбцы вручную.- tohuwawohu 20 октября в 9:23

0 голосов
/ 20 октября 2011

Однострочники 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...