Зачем вообще использовать numpy.savetxt()
для этого? Родной Python поставляется со всем, что вам нужно, например,
lst_h_names = ['name_1', 'namenamename', 'nam3', '4']
lst_h_1_cont = [1, 2, 3000, 4]
lst_h_2_cont = [1, 2000, 3, 4]
lst_scaling_factor = [10, 2, 3, 4]
# combine the lists in a zip object:
l = zip(*[lst_h_names, lst_h_1_cont, lst_h_2_cont, lst_scaling_factor])
# define the format; adjust as you need
fmt = '%s, %i, %i, %i\n'
norm_factors_path = 'all_factors_np.txt'
with open(norm_factors_path, 'w') as f:
f.writelines(fmt % row for row in l)
Если вы хотите использовать np.savetxt в любом случае , вам придется использовать другую опцию для fmt
в данной пример (см. другие приведенные ответы), например,
import numpy as np
arr = np.array([lst_h_names, lst_h_1_cont, lst_h_2_cont, lst_scaling_factor]).T
# note that everything in arr is of type object, i.e. already in string format
# -> we have to use %s for np.savetext therefore:
np.savetxt(norm_factors_path, arr, fmt='%s')
Sidenote: Ваша первоначальная идея для форматирования вывода не за горами; тем не менее, вам потребуется структурированный массив в качестве входных данных. Хотя я бы не рекомендовал это для такого простого случая, как этот, вот пример:
# combine the lists and transform before creating the array:
l = list(zip(*[lst_h_names, lst_h_1_cont, lst_h_2_cont, lst_scaling_factor]))
# create a structured array from l, e.g.
arr = np.array(l, dtype=[('name', 'U10'), ('h1', 'i4'), ('h2', 'i4'), ('scl', 'i4')])
# now you can use the original formatting idea :)
norm_factors_path = 'all_factors_np.txt'
np.savetxt(norm_factors_path, arr, fmt=['%s','%i','%i','%i'])