2015-05-18 2 views
-1

Итак, я написал программу, которая вставляет кортежи в CSV-файл. Это код:Python и CSV: вывести все в одну строку

with open('data.csv','a') as out: 

     csv_out=csv.writer(out) 
     #csv_out.writerow(['Restaurant Name','Change']) 
     for x, y in zip(arrayForInitialSpots, arrayForChosenSpots): 
      csv_out.writerow(x+y) 

И это прекрасно работает, потому что он выводит:

Café A,0,Café B,0 
Restaurant A,0,Restaurant B,0 
Restaurant C,0,Restaurant D,0 
E's Place,0,F's Restaurant,0 

Но то, что я хочу, чтобы написать выше в одной строке, так:

Café A,0,Café B,0,Restaurant A,0,Restaurant B,0,Restaurant C,0,Restaurant D,0,E's Place,0,F's Restaurant,0 

Как мне это сделать? Я пытался использовать .format() символ r \ n \, но он все еще не делает того, что я хочу. Какие-либо предложения? Благодаря!

+1

добавьте свои данные –

ответ

1

Основная цель модуля CSV - получить результаты в виде таблиц. Если вы не хотите, чтобы просто пропустить csv модуль в целом, и выход с write непосредственно в файл:

with open('data.csv','a') as out: 
    starting = True 
    for x, y in zip(arrayForInitialSpots, arrayForChosenSpots): 
      for item in (x + y): 
       if not starting: 
       out.write(", ") 
       starting = False    
       out.write(item + ", ") 

- Однако, CSV может сделать другие приятные вещи, как правильно вылетающих кавычки в собственно текстовых данных. Если вам нужны эти функции, то просто сквош все данные в один список, прежде чем выполнять вывод:

data = [] 
for x, y in zip(arrayForInitialSpots, arrayForChosenSpots): 
    data.extend(x + y) 
with open('data.csv','a') as out: 
    csv.writer(out).writerow(data) 

NB: от ваших выходных данных образцов и фрагментов в этом вопросе, я не могу сказать если вы хотите, чтобы значение в «y» было разделено запятой из значения в «a» или нет, просто измените выражение data.append (возможно, используя два вызова data.append) в соответствии с вашими потребностями.

обновление: изменено для надлежащего аккомодата данных O.P., как указано в комментариях. (То есть использовать «расширить», а не «добавить» во втором фрагменте, и эквивалентные изменения в первом)

+0

Эй, я попробовал выше, но теперь мои данные выходят довольно уродливо. Я думаю, что это из-за природы кортежей, но в любом случае, вот фрагмент: «(u« «Ресторан A», «0», «Ресторан B», 0) «,» (u'Restaurant C ', 0 , u'Restaurant C ', 0) "," (u "" Restaurant D ", 0, u" "Restaurant D", 0) "," (u "" Restaurant E "", 0, u "" Ресторан E ", 0)", "(u'Restaurant F ', 0, u'Restaurant F', 0)", "(u'Restaurant G ', 0, u'Restaurant G', 0)", (u'Restaurant H ', 0, u'Restaurant H', 0) "," (u'Restaurant I ', 0, u'Restaurant I', 0) «Предложения? –

+0

Извините - inddeed - оба ваши 'x' и' y' являются 2-мя корнями - мой пример, поскольку они помещаются вместе в 4-кортеж, который затем считается как один элемент данных в обоих фрагментах. Это можно исправить, используя 'data.extend' вместо' data.append'. (Я исправлю это выше) – jsbueno

0
with open('data.csv','a') as out: 
    out.write(', '.join(x+y for x, y in zip(arrayForInitialSpots, arrayForChosenSpots))) 
-1

Используйте lineterminator аргумент писателя класс

import sys 
import csv 

W = csv.writer(sys.stdout, lineterminator=",") 
W.writerow(["a", "b", "c"]) 
W.writerow(["d", "e", "f"]) 

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

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