Search code examples
pythonnumpyfile-writing

How to append an array to a text file in python


I am trying to create a file with several lines as header and append a column of numbers. I am having some issue appending a numpy.matrix after a header. I wrote a code as belowenter image description here

import numpy as np
import pandas as pd
import xlrd

df = pd.read_csv('Region_SGeMS.csv', header=None)

matrix = np.asmatrix(df)

#print(matrix)

s = np.shape(matrix)
print(s)
row = s[0]
col = s[1]

a = np.flip(matrix, 0)

b = np.reshape(a, (400, 1))

print(b)

f = open('Region.txt', 'w')

f.write(str(s[0]))
f.write(' ')
f.write(str(s[1]))
f.write(' 1 \n')
f.write('1 \n')
f.write('facies \n')

with open('Region.txt', 'a+') as outfile:
    np.savetxt(outfile,b) 

However, the highlighted number should be 2, not 0. I also attached a screenshot of my original excel file. Here is a screenshot of my result


Solution

  • Note that numpy.savetxt will append a header string to the file for you if you let it. For instance:

    import numpy as np
    # Recreate the original csv data
    one_block = np.ones((10,10))
    A   = np.block([ [0*one_block,one_block],[2*one_block,3*one_block] ])
    M,N = A.shape
    # Recreate b
    a   = np.flip(A,0)
    b   = a.reshape(400,1)
    hdr_str = """{M:d} {N:d} 1
    1
    facies""".format(M=M,N=N)
    outfile = 'Region.txt'
    np.savetxt(outfile,b,header=hdr_str,comments='')
    
    

    Below is a screenshot of my attempt at recreating your problem. There is no spurious 0.

    enter image description here