2017-07-12 123 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)