Обычная запись с плавающей запятой с savetxt
:
In [44]: arr = np.arange(0,6,.34).reshape(6,3)
In [51]: np.savetxt('test.txt',arr, fmt='%10.3f', delimiter=',')
In [52]: cat test.txt
0.000, 0.340, 0.680
1.020, 1.360, 1.700
2.040, 2.380, 2.720
3.060, 3.400, 3.740
4.080, 4.420, 4.760
5.100, 5.440, 5.780
Редактирование этого файла после создания, замена сначала разделителя, а затем десятичной точки, является одним из вариантов.
locale
С помощью модуля locale
можно изменить десятичную точку на запятую (я полагаю, это то, что вы пытаетесь сделать с replace
).Но я не могу найти способ использовать это напрямую со стилем форматирования %
, который используется savetxt
.
locale.setlocale (LC_NUMERIC): как заставить его работать в Windows
Но возможно использовать эту локализацию с более новым стилем format
, используя 'n' . So rewriting
savetxt to use
format`:
In [98]: fmt = '{:10.3n}'
In [99]: fmts = ';'.join([fmt]*3)+'\n'
In [100]: fmts
Out[100]: '{:10.3n};{:10.3n};{:10.3n}\n'
In [101]: with open('test1.txt','w') as f:
...: for row in arr:
...: f.write(fmts.format(*row))
...:
In [102]: cat test1.txt
0; 0,34; 0,68
1,02; 1,36; 1,7
2,04; 2,38; 2,72
3,06; 3,4; 3,74
4,08; 4,42; 4,76
5,1; 5,44; 5,78
Ранее в сеансеЯ бы сделал
import locale
locale.setlocale(locale.LC_NUMERIC, 'en_DK.utf8')
Я не знаком с locale
, но этого оказалось достаточно.У меня нет специальных пакетов locale
, установленных в моей системе.
чтение
Остерегайтесь того, что np.genfromtxt
потребуется преобразователь (для возврата запятой на точку).
In [145]: foo = lambda astr: float(astr.replace(b',',b'.'))
In [146]: np.genfromtxt('test1.txt',delimiter=';',converters={i:foo for i in ran
...: ge(3)})
Out[146]:
array([[0. , 0.34, 0.68],
[1.02, 1.36, 1.7 ],
[2.04, 2.38, 2.72],
[3.06, 3.4 , 3.74],
[4.08, 4.42, 4.76],
[5.1 , 5.44, 5.78]])
pandas
pandas
, хотя имеет параметр decimal
:
In [133]: df = pd.read_csv('test1.txt',sep=';',decimal=',',header=None)
In [134]: df
Out[134]:
0 1 2
0 0.00 0.34 0.68
1 1.02 1.36 1.70
2 2.04 2.38 2.72
3 3.06 3.40 3.74
4 4.08 4.42 4.76
5 5.10 5.44 5.78
Модуль записи pandas csv
также принимает параметр decimal
.
Может быть, я должен был посмотреть на pandas
прямо сейчас!