首页 > 解决方案 > 在python中将浮点数和整数打印到具有给定格式的文件中

问题描述

我有这个简单的代码:

import numpy as np
from numpy import random
import csv
import os
import pandas as pd

data=np.loadtxt('lums.dat')
data2=np.loadtxt('all.dat')

shuffle=np.random.shuffle(data[0::1])

with open('data', 'w') as f:
 writer = csv.writer(f, delimiter=" ")
 writer.writerows(zip(data2[:,0], data2[:,1], data[:,0], data[:,1], data2[:,4], data2[:,5]))

输出如下所示:

42.9356886 1.0 30.91534 1.0 0.899 1.0
43.6177968 1.0 30.76019 1.0 1.5 1.0
42.6341244 1.0 29.26717 0.0 0.61 1.0

但是,我需要第二、第四和第六列是整数,并且我还希望能够指定第一、第三和第五列的位数。有没有一种简单的方法可以做到这一点?

编辑:文件 lums.dat 包含:

31.2114100 1
33.0060900 1
31.1879700 1
31.1502300 1
30.0178600 1
29.8382100 1

文件 all.dat 包含:

42.9356886 1  31.2114100 1  0.89900000 1
43.6177968 1  33.0060900 1  1.50000000 1
42.6341244 1  31.1879700 1  0.61000000 1
42.5828698 1  31.1502300 1  0.69700000 1
42.2789821 1  30.0178600 1  0.26000000 1
41.9161537 1  29.8382100 1  0.21400000 1

标签: pythonnumpycsvformatoutput

解决方案


In [32]: txt="""42.9356886 1  31.2114100 1  0.89900000 1 
    ...: 43.6177968 1  33.0060900 1  1.50000000 1 
    ...: 42.6341244 1  31.1879700 1  0.61000000 1"""                                                                 
In [33]: data = np.loadtxt(txt.splitlines())                                                                         
In [34]: data                                                                                                        
Out[34]: 
array([[42.9356886,  1.       , 31.21141  ,  1.       ,  0.899    ,
         1.       ],
       [43.6177968,  1.       , 33.00609  ,  1.       ,  1.5      ,
         1.       ],
       [42.6341244,  1.       , 31.18797  ,  1.       ,  0.61     ,
         1.       ]])

将其写入指定格式的文件:

In [37]: np.savetxt('test.csv', data, fmt='%.7f %d %.7f %d %.7f %d')                                                 
In [38]: cat test.csv                                                                                                
42.9356886 1 31.2114100 1 0.8990000 1
43.6177968 1 33.0060900 1 1.5000000 1
42.6341244 1 31.1879700 1 0.6100000 1

推荐阅读