Re: [Numpy-discussion] how do I specify maximum line length when using savetxt?
I guess I wasn't explicit enough. Say I have an array with 100 numbers and I want to write it to a file with 6 numbers on each line (and hence, only 4 on the last line). Can I use savetxt to do that? What other easy tool does numpy have to do that? Thanks, Mark On 5. des. 2012, at 22:35, Mark Bakker wrote:
Hello List,
I want to write a large array to file, and each line can only be 80 characters long. Can I use savetxt to do that? Where would I specify the maximum line length?
If you specify the format, %10.3f for instance, you will know the max line length if you also know the array shape.
Or is there a better way to do this?
Probably 1000 ways to accomplish the same thing out there, sure. Cheers Paul
On 06.12.2012, at 12:40AM, Mark Bakker wrote:
I guess I wasn't explicit enough. Say I have an array with 100 numbers and I want to write it to a file with 6 numbers on each line (and hence, only 4 on the last line). Can I use savetxt to do that? What other easy tool does numpy have to do that?
I've just been looking into a similar case and I think there is no easy tool for this - i.e. nothing comparable to Fortran's '(6e10.3)' or the like, so if your array does not reshape to a Nx6 array, you'd probably have to write something customised yourself. I would not be terribly difficult to add such functionality to savetxt, but then, unless you want the output file to be more human-readable, there is not really a strong case for writing a shape (100,) array into 16 lines plus an incomplete one - it just would not play well with reading back in and then determining the right shape automatically… HTH, Derek
assuming savetxt does not support it, I modified a bit of code I had to do what I think you need ONLY works for a 1D array and wrapped it into a function that writes in properly formatted columns. I didn't really test it other than what is there. I "dressed" it like savetxt but the glaring difference is that it goes off significant digits as opposed to format. """ import numpy def mysavetxt_forvector(fname, x, sigDigs, delimiter, newline, maxCharsPLine, fmode='w'): padSize = sigDigs + 6 #How many characters per number including empty space fmt = str(padSize) + '.' + str(sigDigs) + 'g' #e.g. 13.7g' asTxtLst = map(lambda val: format(val, fmt), a) #from array to list of formatted strings #how many cols max ? cols = maxCharsPLine/(padSize + len(delimiter)) #write to file size = len(asTxtLst) col = 0 f = open(fname, fmode) while col < size: f.write(delimiter.join(asTxtLst[col:col+cols]) ) f.write(newline) col += cols f.close() #Test it a = numpy.ones(34, dtype='float64') * 7./3. a[3] = 123564234.0002345 a[5] = 1 a[7] = -123564234.0002345 a[9] = -.00000000000023453456345 sigDigs = 7 maxCharsPLine = 80 delimiter = ',' newline = '\n' fname = 'temp.out' mysavetxt_forvector(fname, a, sigDigs, delimiter, newline, maxCharsPLine) #append on this one maxCharsPLine = 33 mysavetxt_forvector(fname, a, sigDigs, delimiter, newline, maxCharsPLine, fmode='a') """ Raul On 05/12/2012 4:40 PM, Mark Bakker wrote:
I guess I wasn't explicit enough. Say I have an array with 100 numbers and I want to write it to a file with 6 numbers on each line (and hence, only 4 on the last line). Can I use savetxt to do that? What other easy tool does numpy have to do that? Thanks, Mark
On 5. des. 2012, at 22:35, Mark Bakker wrote:
Hello List,
I want to write a large array to file, and each line can only be 80 characters long. Can I use savetxt to do that? Where would I specify the maximum line length?
If you specify the format, %10.3f for instance, you will know the max line length if you also know the array shape.
Or is there a better way to do this?
Probably 1000 ways to accomplish the same thing out there, sure.
Cheers Paul _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
participants (3)
-
Derek Homeier -
Mark Bakker -
Raul Cota