Home > other >  Add a space in 2D array when writing a text file
Add a space in 2D array when writing a text file

Time:11-30

I am trying to store a 2D vector into a .DAT file and I would like to add a space at the start of every row. An example of a desired output looks like this:

 0.0000000E 00  0.0000000E 00
 2.0020020E-03  0.0000000E 00
 4.0040040E-03  0.0000000E 00
 6.0060060E-03  0.0000000E 00
 8.0080080E-03  0.0000000E 00
 1.0010010E-02  0.0000000E 00
 1.2012012E-02  0.0000000E 00

You can see at the front of 0, 2e-3, 4e-3, etc. there is a space. My code is trying to do that way

data = np.column_stack((x, y))
with open('output.dat', 'w') as datfile:
    for _ in range(N):
        np.savetxt(datfile, data, delimiter = "  ")

The current output looks like this:

0.000000000000000000e 00  0.000000000000000000e 00
1.250156269533691795e-04  0.000000000000000000e 00
2.500312539067383591e-04  0.000000000000000000e 00
3.750468808601075386e-04  0.000000000000000000e 00
5.000625078134767181e-04  0.000000000000000000e 00
6.250781347668459519e-04  0.000000000000000000e 00
7.500937617202150772e-04  0.000000000000000000e 00

As you can see, there is no space at the front of every line. Do you have any solutions for this? Thanks!

CodePudding user response:

Consider using fmt argument to np.savetxt function, please note this one will set also set the number precision the same as in your desired output. Also note the space in the beginning of fmt string:

np.savetxt(datfile, data, fmt=" %1.7E %1.7E")

More on this in NumPy documentation and Python string module documentation

CodePudding user response:

Use a loop and f-strings:

import numpy as np

data = np.zeros((5, 2), dtype=np.float64)

with open("out.dat", "w") as fh:
    for row in data:
        x, y = row
        fh.write(f" {x}  {y}\n")
 0.0  0.0
 0.0  0.0
 0.0  0.0
 0.0  0.0
 0.0  0.0
  • Related