출력이 tar.bz2 파일에 저장되는 프로그램이 있습니다. 그 데이터를 처리하는 python 스크립트가 있습니다.파이썬에서 손상된 tar.bz2 파일을 읽으려면 어떻게해야합니까?
첫 번째 프로그램이 중단되면 출력 작업을하고 싶습니다. 또는 프로세스가 진행되는 동안 python 스크립트를 실행하면됩니다.
물론 최종 bzip2 블록은 미완성이므로 읽을 수는 없습니다. 실제로 잘려나 갔지만 실제로는 손상되었습니다. GNU tar는 사실상 그 시점까지 파일의 모든 것을 행복하게 추출 할 것입니다 - 그 문제는 bzcat
입니다. 그리고 bzip2recover
은 수리 된 블록을 만들 수 있습니다.이 경우 실제로는 덜 유용합니다 (bzcat
).
하지만 파이썬 표준 인 tarfile 모듈을 사용하려고합니다. 내가 처음에 알고 파일에 TarFile.extractfile
을 사용하려고 할 때
File "/usr/lib64/python2.7/tarfile.py", line 2110, in extractfile
tarinfo = self.getmember(member)
File "/usr/lib64/python2.7/tarfile.py", line 1792, in getmember
tarinfo = self._getmember(name)
File "/usr/lib64/python2.7/tarfile.py", line 2361, in _getmember
members = self.getmembers()
File "/usr/lib64/python2.7/tarfile.py", line 1803, in getmembers
self._load() # all members, we first have to
File "/usr/lib64/python2.7/tarfile.py", line 2384, in _load
tarinfo = self.next()
File "/usr/lib64/python2.7/tarfile.py", line 2319, in next
self.fileobj.seek(self.offset)
EOFError: compressed file ended before the logical end-of-stream was detected
실패합니다. (tar -xf tarfile.tar.bz2 filename
은 잘 추출됩니다.)
파일의 유효하지 않은 끝 부분을 무시하고 내가 가지고있는 것을 사용하면 영리한 방법이 있습니까?
데이터 세트가 상당히 커질 수 있으며 압축률이 매우 높기 때문에 압축되지 않은 상태로 유지하는 것은 바람직하지 않습니다.
는 (I은 기존의 질문 Untar archive in Python with errors을 찾았지만,이 경우, 사용자는os.system
에 tar 파일을 시도하고있다.)
감사합니다. 나는 그것을 시도 할 것이지만, 그것은 내 코드를 재고 할 필요가있을 것이다. 분명히'extractfile' 그리고 그 줄을 반복하여 뒤로 탐색을합니다. – mattdm