바이너리 인코딩 된 32 비트 정수 파일을 읽고 적절하게 구문 분석하는 matlab의 스크립트를 번역 중입니다.예기치 않게 파일 읽기가 끝납니다.
def readi(f,n):
x = zeros(n,int);
for i in range(0,n):
x[i] = struct.unpack('i',f.read(4))[0];
print x[i];
return x;
내가 데이터를 구문 분석으로 내 스크립트에 1에서 9까지의 N로 다양하게이 함수를 호출 : 나는 MATLAB의 FREAD() 함수를 모방하고자하는 다음과 같은 방법을 작성했습니다.
x[i] = struct.unpack('i',f.read(4))[0];
struct.error: unpack requires a string argument of length 4
파이썬 내가 파일의 끝에 도달 생각하는 것으로 나타납니다 내 문제는 내가이 오류가 발생하기 전에 스크립트는 파일에 방법의 일부를 얻을 수 있다는 것입니다. 오류가 발생하는 실행 지점은 이미 여러 번 반복 된 루프의 줄입니다. 또한, 파싱 된 파일의 작은 부분은 이미 내 MATLAB 스크립트가 정확히 동일한 파일 (사본이 아님)에서 생성 된 것과 정확히 일치합니다. 그러나 Matlab은 파일에서 훨씬 더 큰 데이터 세트를 읽을 수 있습니다. 누구든지이 오류가 발생하는 이유에 대한 아이디어가 있습니까?
파일 개체를 여는 코드를 표시하십시오. 바이너리 모드가 아닌 텍스트 모드로 열리고 있습니까? – agf
여기서 하나의 큰 버그는 입력 값의 엔디안을 정의하지 않는다는 것입니다. 또 다른 것은 struct 모듈이 필요한 바이트 수를 알려주고 오류를 피하기 위해 해당 정보를 사용한다는 것입니다. –
struct.error를 잡아 내고 f.tell()을 출력하여 정상 성을 검사 할 수 있습니다. 파일의 크기가 인쇄되면 문제가이 코드와 다르다는 것을 알 수 있습니다. – tdelaney