Форум сайта python.su
Доброе время суток!
Не могу справиться со следующей проблемой: необходимо записать в текстовый файл массив по, скажем, восемь элементов в строке. При чем длина массива не обязательна кратна восьми.
Т.е. если имеем
import numpy
a=numpy.arange(26)
Офлайн
list1=[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]
tmpstr=''
down='\n'
i=0
m=1
for i in list1:
tmpstr=tmpstr+str(i) + ' '
if i==8*m:
tmpstr=tmpstr + down
m=m+1
i=i+1
print tmpstr
Отредактировано (Сен. 17, 2009 16:27:47)
Офлайн
Я конечно, не крутой, а так, в мешочек, но замечания есть:
list1 = range(27) # правильнее
m = 0 # так привычнее, ибо принято нумеровать с 0
m += 1 # просто короче
arr = range(27)
filt = filter(lambda x: x/8 == 0, len(arr))
for x in filt: print >>open('text.txt','aw'),' '.join(map(lambda x: str(x),arr[x:(x+8) or max]))
Офлайн
FerromanТрудно его разобрать - оно падает:
Кто разберёт - тому пирожок.
from itertools import groupby
print >>open('text.txt','w'), '\n'.join([' '.join(["%2d" % i for i in g]) for k,g in groupby(xrange(1, 26), lambda x: (x-1)/8)])
Офлайн
Я код не проверял, вот range() и забыл. И остаток от деления надо, а не целочисленное.
arr = range(27)
filt = filter(lambda x: x%8 == 0, range(len(arr)))
for x in filt: print >>open('text.txt','aw'),' '.join(map(lambda x: str(x),arr[x:(x+8) or max]))
Отредактировано (Сен. 17, 2009 23:29:59)
Офлайн
Код:Спасибо за советы.
list1 = range(27) # правильнее а почему? я там для наглядности написал. Просто так лучше - тоже ответ.
m = 0 # так привычнее, ибо принято нумеровать с 0 это не нумерация, логика нарушится.
m += 1 # просто короче
А вот так никогда не пишите! Почему?
Код:
arr = range(27)
filt = filter(lambda x: x/8 == 0, len(arr))
for x in filt: print >>open('text.txt','aw'),' '.join(map(lambda x: str(x),arr))
list1=[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]
tmpstr=''
down='\n'
i=0
m=8
for i in list1:
tmpstr=tmpstr+str(i) + ' '
if i==m:
tmpstr=tmpstr + down
m=m+8
i=i+1
print tmpstr
Офлайн
Спасибо, все работает!
Сделал вот так:
import numpy as np
arr = np.arange(1,27)
filt = filter(lambda x: x%8 == 0, range(len(arr)))
f=open('text.txt','w')
for x in filt:
f.write(' '.join(map(lambda x: str(x),arr[x:(x+8) or max]))+'\n')
f.close()
import numpy as np
import string
f=open('text.txt','r')
text=f.readlines()
f.close()
text1=''
for i in range(len(text)):
text1+=text[i]
text1=string.split(text1)
arr2=np.array([0.0]*len(text1))
for i in range(len(text1)):
arr2[i]=float(text1[i])
Офлайн
MottleА зачем numpy? Можно сделать обычным xrange по-моему:
Сделал вот так:
f=open('text.txt','w')
line=''
for i in xrange(1,26):
line += " %d" % i
if not i % 8 or i == 25:
f.write(line + '\n')
line = ''
f.close()
Офлайн
А как думаете f=open('text.txt','w') копирует файл в оперативку и потом f.close() сохраняет изменения?? или при каждом f.write(line + ‘\n’) происходит обращение к жёстк. диску?
Офлайн
MottleТак?
Теперь вопрос, как такой файл так же красиво и лаконично прочитать?
result = []
for line in open('text.txt','r'):
result.extend([int(i) for i in line.split()])
Офлайн