Есть ли утилита для транспонирования .csv файла?

У меня есть несколько CSV-файлов со слишком большим количеством столбцов, чтобы открыть LibreOffice Calc, но только с несколькими строками. Если я могу транспонировать CSV-файл, все будет в порядке, так как Calc может обрабатывать намного больше строк, чем столбцов.

3
задан 2 November 2011 в 11:06

3 ответа

Простая программа Python сделала бы задание (и так как это действительно не тестируется: скопируйте Вас файл CSV заранее!):

import csv
import sys
infile = sys.argv[1]
outfile = sys.argv[2]

with open(infile) as f:
    reader = csv.reader(f)
    cols = []
    for row in reader:
        cols.append(row)

with open(outfile, 'wb') as f:
    writer = csv.writer(f)
    for i in range(len(max(cols, key=len))):
        writer.writerow([(c[i] if i<len(c) else '') for c in cols])

Можно сохранить это в файл "my_csv_transposer.py" и назвать его от командной строки как это:

python my_csv_transposer.py <theinfilename> <theoutfilename>
5
ответ дан 2 November 2011 в 11:06

Вы можете использовать этот скрипт из оболочки следующим образом:

$ ./transpose_csv < theinfilename > theoutfilename

А вот скрипт:

#!/usr/bin/env python
import sys, csv, itertools
rows = itertools.izip(*csv.reader(sys.stdin, delimiter=','))
sys.stdout.writelines(','.join(row) + '\n' for row in rows)
0
ответ дан 2 November 2011 в 11:06

Для справки, вот то же заклинание в Ruby:

require 'CSV'

rows = CSV.new($stdin).read
puts rows.transpose.map { |x| x.join ',' }
0
ответ дан 2 November 2011 в 11:06

Другие вопросы по тегам:

Похожие вопросы: