2014-12-15 5 views
0

안녕하세요파이썬 바이너리 파일.

fileID= open('B1b1_t100000.beam','r'); 
npart = 1E6; 
ncoord = 7; 
coords = np.reshape(struct.unpack('d'*int(ncoord*npart),fileID.read()),(npart,ncoord)); 
fileID.close() 

파이썬에서 언 스택 사용하여 문제를 겪고 그리고 오류

Traceback (most recent call last): 
File "transfer_lev_B1.py", line 30, in <module> 
coords = np.reshape(struct.unpack('d'*int(ncoord*npart),fileID.read()),(npart,ncoord)); 
struct.error: unpack requires a string argument of length 56000000 

어디에 문제가 정말 볼 수 없습니다를 얻고있다. 파일 바이트 크기는 56000000입니다. np = 1E4 인 이전 시도에서 코드는 같은 형식의 다른 파일 (전체 줄 수가 적음)에서 작동했습니다. 바이너리 모드로 파일을 열어보십시오 : 내가 더 줄 큰 파일에 갈 때하지만 난

+1

추측 .. 문제가 있습니다. 'fileID = open ('B1b1_t100000.beam', 'rb'); ' – Kevin

+0

또한 ncoord와 npart는 무엇을 나타 냅니까? 'npart * ncoord'는 파일의 크기와 같아야합니까? 왜냐하면 파일이 훨씬 더 큰 56,000,000 일 때 7,000,000과 같기 때문입니다. – Kevin

+0

Nope. 여전히 같은 오류가 발생합니다 :/ – mattskatefreak

답변

0

내 문제를 해결 확인,

import struct 
    import numpy as np 
    import matplotlib.pyplot as plt 

    if __name__ == '__main__': 

     fileID= open('B1b1_t100000.beam','r'); 
     npart = 1E6; 
     ncoord = 7; 
     coords=np.fromfile('B1b1_t100000.beam',dtype=np.float64); 
     coords=coords[:(npart*ncoord)]; 
     coords=np.reshape(coords,(npart,ncoord)); 
     fileID.close() 

    # Beam 1 

     b1_x=coords[:,0]; 
     b1_y=coords[:,2]; 
     b1_z=coords[:,4]; 

     b1_px=coords[:,1]; 
     b1_py=coords[:,3]; 
     b1_deltap =coords[:,5]; 

     beam1=np.array([b1_x,b1_px,b1_y,b1_py,b1_z,b1_deltap,coords[:,6]],np.float64); 
     beam1=beam1.T; 

    # Map applied and new coordinates calculated. 

     x_mod=np.sqrt(foc)*coords[:,0]; 
     y_mod=np.sqrt(foc)*coords[:,2]; 

     px_mod=np.sqrt(defoc)*coords[:,1]; 
     py_mod=np.sqrt(defoc)*coords[:,3]; 

     beam1_mod=np.array([x_mod,px_mod,y_mod,py_mod,b1_z,b1_deltap,coords[:,6]],np.float64); 
     beam1_mod=beam1_mod.T; 

     #---------------Check shape of matrix---------------- 

#print coords.shape 
# print (beam1_mod).shape 
# print beam1.shape 
# print 'beam1= \n', beam1 
# print 'modified \n', beam1_mod 
#---------------------------------------------------- 


# New coordinates printed to binary file. 

    fileMod=open("B1b1_t100000_mod.beam","w"); 
    beam1_mod.tofile(fileMod); 
    fileMod.close()