Python - добавление значения к каждому подсписку в списке списков - PullRequest
0 голосов
/ 24 октября 2018

У меня есть несколько длинных наборов данных, которые я пытаюсь прочитать с помощью numpy, и добавляю значение к каждой строке и выводю их в виде CSV.Конечная цель - разделить несколько измерений из одного и того же файла, поэтому мне нужен какой-то способ пометить каждое из них.Я придумал это:

def csv_test(data_file):
    data_nd = np.genfromtxt(str(data_file),
    delimiter=";",
    usecols=(-3, -2, -1),
    dtype=None)
    data = np.ndarray.tolist(data_nd)
    output = []
    sub_output = []
    sub1 = str(1)
    for i in data:
        sub_output.append(i)
        sub_output.extend(sub1)
    output.append(sub_output)
    print(output)
    x_val = 1
    x_string = str(x_val)
    filename_out = str("temp_" + x_string + ".csv")
    with open(filename_out, "w") as f:
        writer = csv.writer(f)
        for sublist in output:
            writer.writerows(sublist)

Проблема в том, что мой вывод выглядит следующим образом:

[[[0.0, -0.051, -1.525651e-07], '1', ...

, а не как

[[[0.0, -0.051, -1.525651e-07, '1'] ...

Так что в записи CSVшаг, добавленная стоимость переходит на новую строку.Как я могу получить его для добавления в список в списке?

Пример данных:

0;0.000000;-0.050;-6.900140e-008
0;0.100000;-0.050;-6.843410e-008
0;0.200000;-0.050;-6.778820e-008
0;0.300000;-0.050;-6.654330e-008
0;0.400000;-0.050;-6.598800e-008
0;0.500000;-0.050;-6.497330e-008
0;0.600000;-0.050;-6.415210e-008
0;0.700000;-0.050;-6.349080e-008
0;0.800000;-0.050;-6.181810e-008
0;0.900000;-0.050;-6.148080e-008
0;1.000000;-0.050;-6.032090e-008

Ответы [ 2 ]

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

Несколько замечаний:

1) Не используйте здесь .extend, это разделит строку из нескольких символов.

2) data уже является копией, вы можетеиспользуйте его напрямую, не нужно создавать новый вывод

3), поскольку элементы data являются изменяемыми, все, что вам нужно сделать, это изменить их на месте, что и делает .append.Таким образом, ваш код после data = data_nd.tolist() может выглядеть следующим образом:

for sub_list, new_element in zip(data, stuff_to_append):
    sub_list.append(new_element)

Это изменит data так, как вы хотите, и вы можете записать data в файл.

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

Проблема в том, что вы должны добавлять str(1) к i, а не sub_output:

for i in data:
        sub_output.append(i + [sub1])
        # sub_output.extend(sub1) <-- you don't need this line.

Обратите внимание, что мы не i.append(sub1), потому что append() метод возвращает None,Вам нужен полный список i + отдельный элемент list из sub1, добавленный к вашему sub_output.

...