Помогите с внесением данных в таблицу в файл через Python

У меня есть код, который рассчитывает спектр мощности сигнала. Приложу ниже. Так вот, при записи рассчитанных данных в текстовый документ в нем съезжают столбцы после значений, больше 9999. Это происходит на строчке 61 в коде. Выглядит так:Выглядит это так:

Мне нужно, чтобы все значения записывались в ровный столбец, не сдвигая последующие значения, как выделено на картинке. Я пробовал сделать так, чтобы после результата, превышающего 9999 ставился один таб через циклы if, for, но ничего не получилось. Помогите, пожалуйста, подправить этот момент. Код:

import numpy as np
import pandas as pd
from numpy import fft

# Чтение данных ЭЭГ в DataFrame

sample_csv = pd.read_csv("data_head.txt",  skiprows=[0,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,27,28,29,30,31,32,131367], sep = '\t')
def is_float(x):
  try:
    float(x)
  except ValueError:
    return False
  return True
sample = sample_csv[sample_csv.applymap(lambda x: is_float(x))].dropna()
sample = sample.apply(lambda col:pd.to_numeric(col, errors='coerce'))
N_sample = len(sample) # количество строк в DataFrame
# Индексированный список каналов (столбцов) ЭЭГ, записанных в DataFrame
channels = sample_csv.columns.values
Ranges = ['Alfa', 'Beta']
# Counting the number of recorded EEG channels
N_ch = len(channels) # Подсчет количества зарегистрированных каналов ЭЭГ
# Частота дискретизации записанных сигналов
Fs = 250      # Hz
tstep = 1/Fs  # интервал выборки
N = 250*2  # количество семплов, сейчас 6 сек, если 3 мин то -> (250*60*3)
t = np.linspace(0, (N-1)*tstep, N) # временные шаги
fstep = Fs/N # частотный интервал
f = np.linspace(0, (N-1)*fstep, N) # шаги частоты

# установить границы общепринятых частотных диапазонов ЭЭГ
# эти значения могут варьироваться в зависимости от задачи

Af1 = int(8.0/fstep) # lower bound of Alfa
Af2 = int(13.0/fstep) # upper bound of Alfa
Bt1 = int(13.0/fstep) # lower bound of Beta
Bt2 = int(18.0/fstep) # upper bound of Beta

# Функция расчета спектра (частоты и амплитуды) методом БПФ
# расчет суммарной мощности спектра и мощности диапазона
def FFT_EEG(y) :
  X = np.fft.fft(y)
  X_mag = np.abs(X)/N
  f_plot = f[0:int(N/2+1)]
  X_mag_plot = 2*X_mag[0:int(N/2+1)]
  X_mag_plot[0] = X_mag_plot[0]/2   # постоянная составляющая не требует 2x
  # графики
  # приведенный ниже код позволяет увидеть динамику сигнала и соответствующий амплитудно-частотный спектр
  # за выбранный интервал времени (эпоху) и назначение

  # функция расчета мощности спектра
  def power_spectrum(start, stop) :
    power = sum(X_mag_plot[i]**2 for i in range(start, stop))
    return round(power, 2) # значение округляется до двух знаков после запятой
  # расчет общей мощности спектра (от 0,5 до 35 Гц)
  # расчет мощности спектра в диапазонах
  Alfa_power = power_spectrum(Af1,Af2)
  Beta_power = power_spectrum(Bt1,Bt2)
# запись в файл расчетных показателей для заданной эпохи заданного лида
  with open('Spect_EEG.txt', 'a') as file:
   file.write(str(Alfa_power) + '\t'*2 + str(Beta_power) + '\t'*2) #та самая 61 строка
# Запись заголовков столбцов в файл
with open('Spect_EEG.txt', 'w') as file :
  for m1 in range(N_ch-4) :
    for m2 in range(0, 2) :
      file.write(str(channels[m1])  + Ranges[m2] + '\t')
  file.write('\n')  # перевод строки для записи спектральной мощности по эпохам

# Перечисление каналов
j=1
N_2 = N*j
while N_2 < N_sample :
  for i in range(N_ch-4) :
    y = sample[channels[i]]
    y = y[(N_2-N):N_2]
    FFT_EEG(y)    
  j=j+1
  N_2 = N*j-1
  with open('Spect_EEG.txt', 'a') as file :
    file.write('\n') # перевод строки для записи следующей эпохи

Текстовый документ, на основе которого происходит рассчет не знаю, как загрузить сюда). Заранее благодарю


Ответы (1 шт):

Автор решения: Salavat

Используйте форматирование строк.Например:

import random
for i in range(10):
    for j in range(3):
        k = random.random()
        k1 = round(k*k*10, 3)
        k2 = int(k*15000)
        k3 = round(k*5080, 1)
        print('{:>15}{:>15}{:>15}'.format(k1, k2, k3))
→ Ссылка