Найти - Пользователи
Полная версия: Пробразование в csv
Начало » Python для новичков » Пробразование в csv
1
drm
Есть несколько файлов содержимое которых отформатировано следующим образом:

-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
...
Посоветуйте, как наиболее коротко можно решить поставленную задачу. Очевидный вариант, это, наверное, считать каждую из трех групп в отдельную строку а потом сделать сплит и циклом загнать все данные в файл. Может быть можно как-то проще?
asv13
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()
наверняка есть способы и проще, может кто еще отпишет
pyuser
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")
оба цикла наверняка можно записать несколько “симпатичнее”, просто это первое, что пришло в голову
asv13
Вижу зря я 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)]
drm
Большое спасибо за помощь, все работает!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB