[python] 파이썬에서 여러 바이너리 파일을 올바르게 처리하는 방법은 무엇입니까?

현재 PycURL 모듈의 도움을 받아 멀티 스레드 다운로더에서 작업하고 있습니다. 파일의 일부를 다운로드하고 나중에 병합합니다.

부분은 여러 스레드와 별도로 다운로드되고 바이너리 모드로 임시 파일에 기록되지만 단일 파일로 병합하면 올바른 순서로 병합됩니다. 체크섬이 일치하지 않습니다.

이것은 리눅스 환경에서만 발생합니다. 동일한 스크립트가 Windows 환경에서 완벽하게 작동합니다.

파일을 병합하는 코드 (스크립트의 일부)입니다.

with open(filename,'wb') as outfile:
    print('Merging temp files ...')
    for tmpfile in self.tempfile_arr:
        with open(tmpfile, 'rb') as infile:
            shutil.copyfileobj(infile, outfile)
    print('Done!')

나는 또한 write()방법을 시도했지만 같은 문제가 발생하고 큰 파일에는 많은 메모리가 필요합니다.

cat리눅스에서 수동으로 부품 파일을 단일 파일로 만들면 파일의 체크섬이 일치하면 문제는 파이썬의 파일 병합과 관련이 있습니다.

편집 :
다음은 문제를 재현하는 데 사용한 파일과 체크섬 (sha256)입니다.



답변

최소한의 재현 가능한 경우가 편리하지만 보편적 인바꿈 이 문제가 될 것으로 생각 됩니다. 기본적으로 파일이 창 ​​스타일 텍스트 (줄 바꿈 \r\n) 인 경우 Unix 스타일 줄 바꿈 ( \n)으로 변환됩니다 . 독서. 그리고 그 유닉스 스타일의 줄 바꿈은 예상했던 Windows 스타일의 줄이 아닌 출력 파일에 다시 쓰여질 것입니다. 그것은 파이썬과 파이썬의 차이점을 설명 할 것입니다.cat (어떤 번역도하지 않음) .

newline=''에 빈 문자열을 전달하여 스크립트를 실행하십시오 open.


답변