Как импортировать csv с несколькими матрицами в файл dict с поплавковыми векторами? [Дубликат]

По состоянию на февраль 2016 года - см. таблицу TALLY Table Example - очень вероятно, чтобы превзойти мой TVF ниже, с февраля 2014 года. Сохраняя исходное сообщение ниже для потомков:


Слишком много повторяющегося кода для моей симпатии в приведенных выше примерах. И мне не нравится производительность CTE и XML. Кроме того, явный Id, чтобы потребители, имеющие специфику заказа, могли указать предложение ORDER BY.

CREATE FUNCTION dbo.Split
(
    @Line nvarchar(MAX),
    @SplitOn nvarchar(5) = ','
)
RETURNS @RtnValue table
(
    Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
    Data nvarchar(100) NOT NULL
)
AS
BEGIN
    IF @Line IS NULL RETURN

    DECLARE @split_on_len INT = LEN(@SplitOn)
    DECLARE @start_at INT = 1
    DECLARE @end_at INT
    DECLARE @data_len INT

    WHILE 1=1
    BEGIN
        SET @end_at = CHARINDEX(@SplitOn,@Line,@start_at)
        SET @data_len = CASE @end_at WHEN 0 THEN LEN(@Line) ELSE @end_at-@start_at END
        INSERT INTO @RtnValue (data) VALUES( SUBSTRING(@Line,@start_at,@data_len) );
        IF @end_at = 0 BREAK;
        SET @start_at = @end_at + @split_on_len
    END

    RETURN
END
1
задан user162330 6 June 2015 в 18:16
поделиться

2 ответа

Вам нужно проанализировать первую строку, создать столбцы и затем перейти к остальным строкам.

Например:

columns = []
with open(file,'rU') as f: 
    reader = csv.reader(f)
    for row in reader:
        if columns:
            for i, value in enumerate(row):
                columns[i].append(value)
        else:
            # first row
            columns = [[value] for value in row]
# you now have a column-major 2D array of your file.
as_dict = {c[0] : c[1:] for c in columns}
print(as_dict)

вывод:

{
    ' numbers': [' 1', ' 2', ' 3', ' 4'], 
    ' colors ': [' blue', ' red', ' green', ' yellow'],
    'strings': ['string1', 'string2', 'string3', 'string4']
}

(некоторые странные пробелы, которые находились в вашем «файле». Удалите пробелы до / после запятых или используйте value.strip(), если они находятся в вашем реальном вводе.)

3
ответ дан tehwalrus 23 August 2018 в 19:40
поделиться

Вот почему мы имеем defaultdict

from collections import defaultdict
from csv import DictReader

columnwise_table = defaultdict(list)
with open(file, 'rU') as f:
    reader = DictReader(f)
    for row in reader:
        for col, dat in row.items():
            columnwise_table[col].append(dat)
print columnwise_table
3
ответ дан Semmel 23 August 2018 в 19:40
поделиться
Другие вопросы по тегам:

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