Преобразование массива в форматированную строку CSV / TSV в Python - PullRequest
1 голос
/ 05 мая 2010

Python предоставляет csv.DictWriter для вывода CSV в файл. Какой самый простой способ вывести CSV в строку или в стандартный вывод?

Например, для двумерного массива:

[["a b c", "1,2,3"],
 ["i \"comma-heart\" you", "i \",heart\" u, too"]]

вернуть следующую строку:

"a b c, \"1, 2, 3\"\n\"i \"\"comma-heart\"\" you\", \"i \"\",heart\"\" u, too\""

который при печати будет выглядеть так:

a b c, "1,2,3"
"i ""heart"" you", "i "",heart"" u, too"

(Я принимаю слово csv.DictWriter, что на самом деле это канонический способ вывода этого массива как CSV. Excel действительно правильно его анализирует, а Mathematica - нет. * страница википедии на CSV кажется, что Mathematica не права.)

Один из способов - записать временный файл с помощью csv.DictWriter и прочитать его обратно с помощью csv.DictReader. Какой способ лучше?

TSV вместо CSV

Мне также кажется, что я не предан CSV. TSV избавит вас от головной боли с разделителями и кавычками: просто замените вкладки пробелами в записях 2D-массива, а затем просто разбросайте вкладки и символы новой строки, и все готово. Давайте включим в ответы решения как для TSV, так и для CSV, чтобы сделать это максимально полезным для будущих пользователей.

1 Ответ

5 голосов
/ 05 мая 2010

Мы используем StringIO для этого

myFakeFile = StringIO.StringIO()
wtr = csv.DictWriter( myFakeFile, headings )
...
myFakeFile.getvalue()

Обычно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...