2016-06-23 3 views
-1

Я зацикливаю на массив 2d (данные), затем заполняю поля, используя разные сегменты массивов, которые я перебираю. Ниже приведен пример кода:записи массивов в csv

with open('output.csv' , 'wb') as outcsv: 
    headers = ['Field1', 'Field2', 'LongField'] 
    writer = csv.DictWriter(outcsv, headers) 
    writer.writeheader() 
    for i in range(numArrays): 
     row = [{'Field1': data[i][:3], 
       'Field2': data[i][3:5], 
       'LongField': data[i][5:]}] 
     writer.writerows(row) 

Я получаю желаемый результат для всех полей, кроме «Longfield», где число значений являются большими (сотни, может быть даже несколько тысяч) и различной. Вот что мой результат выглядит:

Field1 Field2 LongField 
3,4,5 1,2 array([0,0,0,...,0,0,0]) 
5,3,6 0,9 array([0,0,0,...,0,0,0]) 

Это происходит потому, что им превышение какого-то максимум позволяют значения можно записать в ячейку? Есть ли способ записать все фактические значения в ячейку?

Любая помощь будет принята с благодарностью!

+0

, потому что вы не имеете конечный индекс может быть, он принимает остальные из массива и выводит его, как массив. Попробуйте поместить 'len (data [i])' следующим образом: '[5: len (data [i])]' – deltashade

+0

Что такое образец 'data'? Что вам нужно для данных в столбце «LongField»? Как вы ожидаете, чтобы множество значений отображалось в одном столбце csv? – martineau

+0

@ deltashade Я пробовал это, но те же результаты .. – user32147

ответ

1

Я подозреваю, что OP хочет, чтобы все эти 0 печатались, независимо от того, сколько их там. Нет array( ни ) и не многоточие ...

Guess:

Попробуйте ','.join([str(_) for _ in data[i][5:]])

В полном объеме:

row = [{'Field1': data[i][:3], 'Field2': data[i][3:5], 'LongField': ','.join([str(_) for _ in data[i][5:]])}] 

Related to this answer.

Помощь:

Какой тип вы используете? Можете ли вы показать нам больше кода? Или скажите вывод: type(data[0])

EDIT

О.П. уточнил, какой массив и как долго:

Это numpy.array (или один размер ndarray, так же ул лечение)

И это 2,984 долго.

Видимо версия ул из numpy.array обрежет все, кроме первых 3 и последние 3 элементов, когда массив содержит 1000 элементов или более

999 элементов:

str(numpy.array(range(1000))) 
>>[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
>> 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 
>> 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
>> 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 
>> 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 
>> 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 
etc... 

1000 элементов:

str(numpy.array(range(1001))) 
>>'[ 0 1 2 ..., 998 999 1000]' 

Итак, я думаю, что моя оригинальная рекомендация должна работать, заставляя ее представлять строковое представление. Я думаю, CSV DictWriter должен позаботиться о цитировании.

','.join([str(_) for _ in numpy.array(range(2987))]) 

EDIT

Объясняя свой ответ:

Таким образом, вы не даете DictWriter строку - она ​​должна вывести строку. Я предполагаю, что DictWriter будет использовать функцию Python str. Как указано в документации, функция str будет:

Возвращает строку, содержащую красиво отображаемое представление объекта.

Я полагаю numpy разработчики думали, что array с> 999 элементов будет не быть очень «версия для печати»

Так выше 1000 они, вероятно, функция __str__ возвращает «обобщенную» версию, которая показывает только первые 3 элемента и последние 3 элемента.

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

','.join([str(_) for _ in [1,2,3]]) 
  • ','.join() будет «сцепить» все элементы на запятую; элементы должны быть строками
  • [str(_) for _ in [1,2,3]] преобразует отдельные элементы строки (необходимые для объединения работы)
+0

Извините за путаницу. Вот вывод типа (data [0]): user32147

+0

вот вывод данных: >>> data array ([[0., 1., 0., ... , 0., 0., 0.,], [0., 1., 0., ..., 0., 0., 0.,], ...,]]) – user32147

+0

>>> len (data [0]) 2984 – user32147

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