Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2009 12:43:39

drm
От:
Зарегистрирован: 2008-12-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Пробразование в csv

Есть несколько файлов содержимое которых отформатировано следующим образом:

-5.906259 -5.940275 -5.931177 -5.941153 -5.942855 -5.942276 -5.968357 
-6.346675 -6.592656 -6.636497 -9.060647 -9.051093 -9.060074 -9.061402
-9.369555 -9.537909 -14.426705 -14.434151 -14.559075 -14.443018 -14.445596
-14.448160 -14.561109 -14.563449 -14.442275 -14.444956 -14.456397
-14.459055 -14.636674 -14.951340 -16.125837 -15.706537 -15.704659
-17.514938 -19.711838 -20.472153

146.890778 146.950867 145.830215 145.828659 145.840012 145.834015
145.737946 145.206360 145.672699 145.759308 149.288788 148.527069
148.525757 148.534805 147.197128 147.338409 143.665375 141.946259
142.706116 141.928604 141.944229 141.959793 142.698807 142.712601
141.937836 141.953384 141.951416 141.966904 142.685623 144.316422
144.347321 135.554825 135.550049 138.460175 145.043198 147.982590

61 64 79 98 81 93 64 84 61 24 78 54 98 79 47 54 54 73 73 37 98 88
45 64 96 94 77 45 45 51 46 51 20 50 65 57
То есть три отдельных группы данных. Необходимо преобразовать это содержание в формат сsv. Итоговый файл должен выглядеть следующим образом:

-5.906259,146.890778,61
-5.940275,146.950867,64
...
Посоветуйте, как наиболее коротко можно решить поставленную задачу. Очевидный вариант, это, наверное, считать каждую из трех групп в отдельную строку а потом сделать сплит и циклом загнать все данные в файл. Может быть можно как-то проще?



Отредактировано (Янв. 15, 2009 12:45:01)

Офлайн

#2 Янв. 15, 2009 13:24:34

asv13
От:
Зарегистрирован: 2007-01-22
Сообщения: 130
Репутация: +  0  -
Профиль   Отправить e-mail  

Пробразование в csv

from numpy import *
data = open('1.txt', 'r').read()
arr = fromstring(' '.join(data.split()), sep = ' ')
arr.shape=(3, arr.shape[0] / 3)
fout = open('out.csv', 'w')
for k in range(len(arr[0])):
fout.write(','.join(map(str, arr[:,k]))+'\n')
fout.close()
наверняка есть способы и проще, может кто еще отпишет



Офлайн

#3 Янв. 15, 2009 14:15:11

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Пробразование в csv

drm
Посоветуйте, как наиболее коротко можно решить поставленную задачу. Очевидный вариант, это, наверное, считать каждую из трех групп в отдельную строку а потом сделать сплит и циклом загнать все данные в файл. Может быть можно как-то проще?
Ваша идея очень просто реализуется:
    groups = []
group = []
for line in (x.strip() for x in file("file_name").readlines()) :
if line :
group.append(line)
else :
groups.append(" ".join(group).split())
group[:] = []

with file("file_name.csv", "wb") as out
for group in zip(*groups) :
out.write(", ".join(group) + "\n")
оба цикла наверняка можно записать несколько “симпатичнее”, просто это первое, что пришло в голову



Офлайн

#4 Янв. 15, 2009 16:16:10

asv13
От:
Зарегистрирован: 2007-01-22
Сообщения: 130
Репутация: +  0  -
Профиль   Отправить e-mail  

Пробразование в csv

Вижу зря я numpy включил сюда

data = open('input_file.txt', 'r').read().split()
k = len(data)/3
fout = open('out_file.csv', 'w')
[fout.write(','.join((data[t], data[t+k], data[t+2*k]))+ '\n') for t in range(k)]
fout.close()
или так
[fout.write(','.join([(data) for d in range(3)])+ ‘\n’) for t in range(k)]



Отредактировано (Янв. 15, 2009 16:21:24)

Офлайн

#5 Янв. 16, 2009 12:53:19

drm
От:
Зарегистрирован: 2008-12-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Пробразование в csv

Большое спасибо за помощь, все работает!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version