Записывать списки в csv в Python

У меня есть список значений:

Вывод list_a:

list_a: [[[2.0, 4.0], [1.0, 2.0]], [[2.0, 4.0], [2.0, 3.0], [3.0, 1.0]], [[3.0, 6.0], [5.0, 5.0], [6.0, 4.0]], [[3.0, 6.0], [4.0, 7.0]], [[2.0, 4.0], [3.0, 6.0]]]

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

 (2.0; 4.0) | (1.0; 2.0)
 (2.0; 4.0) | (2.0; 3.0) | (3.0; 1.0)
 ...

Знак "|" представляет собой разделение ячеек в одной строке (не включается в файл csv), а формат значений в ячейке должен состоять из круглых скобок и точки с запятой как таковой (X1; X2)

Я пробовал следующее, но получаю скобки и двоеточия:

with open('outputdata.csv', 'w') as outfile:
    mywriter = csv.writer(outfile)

    for d in result:
        mywriter.writerow(d)

Любая помощь приветствуется!

Это не то, как вы определяете список в Python. Если это не в словаре или в чем-то подобном

user3483203 12.06.2018 17:44

Чтобы уточнить, ваш list_a - это не многомерный массив, а список списков.

DYZ 12.06.2018 17:47

Это результат list_a из python, и да, я исправил заголовок

mb567 12.06.2018 17:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
40
3

Ответы 3

Возможно, будет проще сгенерировать выходной файл без писателя:

SEP = ',' # Use any other separator here, if you want
with open('outputdata.csv', 'w') as outfile:
   for line in list_a:
      outfile.write(SEP.join(['({}; {})'.format(*pair) for pair in line]))
      outfile.write("\n")

'|' представляет переход к другой ячейке в той же строке, это не должно быть записано в файл csv.

mb567 12.06.2018 17:55

Это то, что вы использовали в своем примере. Вместо этого вы можете использовать запятую или любой другой символ.

DYZ 12.06.2018 17:58

Мне не нужен разделитель, мне нужно перемещать ячейки в одной строке и не помещать всю строку в одну ячейку.

mb567 12.06.2018 18:08

Все ячейки в CSV-файле разделяются разделителем (обычно запятой). Так определяется ячейка. Если разделителей нет, значит ячеек нет. Я предлагаю вам попробовать ввести код, а затем открыть файл в Excel.

DYZ 12.06.2018 18:10

Вы можете попробовать написать csv самостоятельно, без какого-либо класса писателя:

with open('outputdata.csv', 'w') as f:
    for vector in list_a:
        len_ = len(vector)
        for i, point in enumerate(vector):
            f.write("({}; {})".format(*point))
            # avoid writing the last pipe
            if i != len_ - 1:
                f.write(" | ")
        f.write("\n")

Содержание:

(2.0; 4.0) | (1.0; 2.0)
(2.0; 4.0) | (2.0; 3.0) | (3.0; 1.0)
(3.0; 6.0) | (5.0; 5.0) | (6.0; 4.0)
(3.0; 6.0) | (4.0; 7.0)
(2.0; 4.0) | (3.0; 6.0)

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

with open('outputdata.csv', 'w') as outfile:
    mywriter = csv.writer(outfile)
    for d in result:
        row = ' | '.join(['(%f; %f)' % (t[0], t[1]) for t in d])
        mywriter.writerow(d)

Каждый элемент каждой строки представляет собой массив из двух чисел с плавающей запятой, верно? Итак, мы используем строку формата для преобразования [2.0, 4.0] в "(2.0; 4.0)". Мы делаем это для каждого кортежа в строке. Затем мы просто используем функцию Python join(), чтобы поместить символы | между ними и связать их все в одну строку, которую мы можем записать в файл.

Я не хочу связывать их в одну строку, а не соединять их через '|' Я использовал этот символ, чтобы пометить новую ячейку, чтобы каждая пара (X1; X2) находилась в одной ячейке в той же строке, а затем мы переключаем строки

mb567 12.06.2018 18:09

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