2013-08-16 5 views
1

Как распечатать каждый список в списке1 или списке2 как столбец без включенного '[]'?Напишите список списков в строку csv

import csv 
def test(): 
    list1 = [[1, 2, 3, 4], [3, 2, 5], [9, 3, 6, 8, 4]] 
    list2 = [[2, 2, 4, 4], [1, 9, 10], [2, 7, 7, 4, 5]] 
    with open('doc.csv', 'w', newline='') as file: 
     writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_ALL) 
     writer.writerow(list1) 
     writer.writerow(list2) 
if __name__ == '__main__': 
    test() 

Это близко к тому, что я хочу, но есть [] в строке:

[1, 2, 3, 4],[3, 2, 5],[9, 3, 6, 8, 4] 
[2, 2, 4, 4],[1, 9, 10],[2, 7, 7, 4, 5] 

EDIT:

Я хочу:

"1, 2, 3, 4","3, 2, 5","9, 3, 6, 8, 4" 
"2, 2, 4, 4","1, 9, 10","2, 7, 7, 4, 5" 
+0

Что вы хотите, чтобы каждый список-в колонке выглядеть? – martineau

+2

Пожалуйста, покажите результат, который вы _actually_ желаете, а не просто показываете нам неправильный вывод и заставляете нас угадать, что вы можете захотеть. – abarnert

+0

См. Мое редактирование ..... – arynhard

ответ

1

Это, как я хотел бы сделать это:

import csv 

def nested_list_formatter(nested): 
    return tuple(','.join(str(item) for item in sublist) for sublist in nested) 

def test(): 
    list1 = [[1, 2, 3, 4], [3, 2, 5], [9, 3, 6, 8, 4]] 
    list2 = [[2, 2, 4, 4], [1, 9, 10], [2, 7, 7, 4, 5]] 
    with open('doc.csv', 'w', newline='') as file: 
     writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_ALL) 
     writer.writerow(nested_list_formatter(list1)) 
     writer.writerow(nested_list_formatter(list2)) 

if __name__ == '__main__': 
    test() 

Итогового содержание doc.csv:

"1,2,3,4","3,2,5","9,3,6,8,4" 
"2,2,4,4","1,9,10","2,7,7,4,5" 
+0

точно, спасибо! – arynhard

1

Колонка только напечатанные позвонив по телефону str. Итак, если вы хотите сделать что-то еще, вам нужно преобразовать каждый столбец в строку самостоятельно * (поскольку вызов str на строку просто возвращает строку).

В вашем случае мы должны превратить каждый элемент внешнего списка в строки в желаемом формате ... что само по себе потребует превратить каждый элемент каждого внутреннего списка в строки, чтобы мы могли каким-то образом присоединиться к ним. В общем, в Python, чтобы что-то сделать для каждого элемента последовательности, вы либо вызываете map, либо пишете понимание, поэтому я сделаю один из них.

После редактирования вы хотите, чтобы столбцы с разделителями-запятыми были разделены запятыми и значениями, разделенными запятыми, в столбцах, но это нормально, потому что вы хотите, чтобы столбцы автоматически указывались. Это легко.

Чтобы объединить значения с помощью ', ', вы просто вызываете ', '.join() на них.

def stringify_column_list(column_list): 
    return ', '.join(str(value) for value in column_list) 

Странная сепаратор и цитирование, вы уже знаете, как обращаться в writer. Таким образом, единственное, что осталось, чтобы вызвать нашу функцию форматирования на каждую колонке:

writer.writerow(map(stringify_column_list, list1)) 
writer.writerow(map(stringify_column_list, list2)) 

Вы могли бы даже рассмотреть вопрос об использовании csv модуля снова, чтобы создать значение столбцов. Но это, вероятно, слишком много.


* Или в какой-нибудь другой объект с __str__ метод, который делает то, что вы хотите, но это редко стоит делать.

+0

Не работает ли csv.QUOTE_ALL для разделителей запятой? – arynhard

+0

@ user1991424: Ну, я не вкладывал слишком много акций в «писатель», который вы на самом деле писали, потому что вы явно не собираетесь получать столбцы, разделенные четырьмя пробелами (как вам кажется), когда вы позволяете им по умолчанию запятыми как разделитель. – abarnert

+0

Пространства показывают различие между столбцами. Я исправлю свой пост – arynhard

Смежные вопросы