Форум сайта python.su
Есть несколько файлов содержимое которых отформатировано следующим образом:
-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
-5.906259,146.890778,61
-5.940275,146.950867,64
...
Отредактировано (Янв. 15, 2009 12:45:01)
Офлайн
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()
Офлайн
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")
Офлайн
Вижу зря я 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()
Отредактировано (Янв. 15, 2009 16:21:24)
Офлайн
Большое спасибо за помощь, все работает!
Офлайн