2017-07-12 119 views
2

我有一个C库,我用ctypes封装了Python,并且我有这个在 以下的DLL,当我要求时打印出时间值。但不是每个项目都经过 ,而是手动要求它打印出每个值60000次。我希望它与所有的值创建自己的目录 这里是我的代码和库中的小例子,我已经包裹:打印出值列表

import ctypes 
from ctypes import * 

class SParm(Structure): 
pass 

SParm._fields_ = [ 
     ('name', ctypes.c_char_p), 
     ('data', ctypes.POINTER(ParmData)), 
     ('time', ctypes.POINTER(ctypes.c_float))] 

MultiF = (b'path_to_file') 
dll = CDLL('path_to_dll') 

PN = ctypes.c_char_p(b'Paramter_name') 
startTime = ctypes.c_double(-3.4**38) 
stopTime = ctypes.c_double(3.4**38) 
DT_RETURN = 0x0100 
DT_FLOAT = 0x0001 
convertType = (DT_RETURNGMT|DT_FLOAT) 
Null = 0 

dll.readSParm.argtypes = (POINTER(SFile), c_char_p, c_double, c_double, c_double, POINTER(TTag), c_ushort,) 
dll.readSParm.restype = POINTER(SParm) 

g = dll.readSParm(f, PN, startTime, stopTime, Null, None, convertType) 

print(g[0].time[0]) 
print(g[0].time[1]) 
print(g[0].time[51999]) 

这些返回值的代码给我:

-1031.0762939453125 
-1031.0362548828125 
0.0 

而不是手动要求它打印出每个单独的值51000次,然后手动将所有这些值放入一个列表中。我希望能够一次打印出所有值。有没有可以做到这一点的代码?可能print()不是将所有值都列入列表的最佳方式。

我的问题是这样的: 如何打印包含在

(g[0].time) 

所有的值,而无需手动要求它单独打印出来的值,并把它们放到一个列表?

回答

1

你可以用一个简单的for循环处理这个问题:

for x in g[0].time: 
    print(g[0].time[x]) 
+0

不应该打印X? –

+0

@AgataAndrzejewska正面!我会纠正它,iuf,我的错误 –

3
import sys 
import numpy as np 
np.savetxt(sys.stdout, g[0].time) 
+0

@DamianLattenero谢谢! 'savetxt()'有一些优点,比如它也可以用于多列数组。 –

+0

在这个例子中是什么? –

+0

不理会最后的评论。当我运行这是得到'ncol = X.shape [1] IndexError:元组索引超出范围'错误 –

3

你可以加入他们的行列

print('\n'.join(g[0].time)) 

这将创建一个大字符串分隔与新线的每个值。

+0

在word时间之后有一个'SyntaxError:解析出现的意外EOF,箭头指向该行)。 –

+0

我错过了最后一个括号。 – Dan

1

可以打印它们作为一个列表,这样做:

print(g[0].time) 

或单独打印每一个值:

for value in g[0].time: 
    print(value)