2014-09-16 3 views
1

파이썬에서 gzip을 사용하여 파일에 튜플을 반복 작성하려고합니다. 하지만 새로운 라인 문자 (\ n)도gzip 파이썬 파일에 새 줄 쓰기

For example: 
    if the iterable of tuples is like this: [(1,2,3) , (4,5)] 
    the output file should be : 1,2,3 
           4,5 

    but I got: 1,2,34,5 



    I dont know where is my newline character gone!!! 

    Here is my code: 
     fi = gzip.open(filename, "wb") 
     for tup in data: 
     fi.write(','.join(str(x) for x in tup).encode("utf-8")) 
     fi.write("\n".encode("utf-8")) 
     fi.close() 
+0

'데이터'정의를 포함하십시오. 코드의 스 니펫이 의도 한대로 수행되므로 문제가 코드의 다른 곳에 있다고 의심됩니다. –

+2

아마도'\ r \ n' 만 개행 문자로 인식하는 편집기로 파일을 여는 것이 가능할 수 있습니다. – bernie

+0

@bernie : agree. 나는 그들이 Windows에 있으며 아마도 메모장에서 압축되지 않은 파일을 열었을 것으로 추측하고 싶습니다. 메모장은 벙어리이다. \ r \ n이 보이지 않으면 개행 문자가 보이지 않습니다. \ n 자체는 단순하게 무시됩니다. 워드 패드 및 대부분의 다른 편집자는 자동으로 변환 작업을 수행 할 수있을만큼 똑똑합니다. –

답변

2

난 단지 당신이 읽거나 비 압축 데이터를 표시하는 방법에 문제가 있음을 가정 할 수있다을 쓸 때? 나는 Windows 및 Linux (파이썬 2.7)에 다음 코드를 시도하고 한 작업 :

import gzip 

filename = 'gzipout.gz' 
data = [(1,2,3) , (4,5)] 
fi = gzip.open(filename, 'wb') 
for tup in data: 
    fi.write(','.join(str(x) for x in tup).encode("utf-8")) 
    fi.write('\n'.encode("utf-8")) 
fi.close() 

fi = gzip.open(filename, 'rb') 
unzipdata = fi.read() 
print unzipdata 
fi.close() 

출력했다 :

1,2,3 
4,5 

이 코드는 단순히 파일에 내용을 gzip 형태로 압축 한 후 다시 읽어 압축 된 데이터를 그대로 콘솔로 덤프합니다. 개행 문자가 있습니다.

gunzip gzipout.gz을 사용하면 gzipout으로 추출되고 내용을 표시하면 개행 문자도 표시됩니다.

비정상적인 텍스트 파일을 열 때 이전의 두뇌가 죽은 프로그램을 사용하는 경우 특히 문제가되지 않습니다. * nix 세계에서 EOL (end of line)은 이고 일반적으로\n으로 표시됩니다. Windows EOL은 두 문자 \r\n으로 표시됩니다. Python은 universal 모드로되어있어 \n을 EOL이 플랫폼에 자동으로 변환되도록 텍스트를 쓰는 모드입니다. 불행히도 GZIP은 여전히 ​​Python 2.7에서 그 플래그를 존중하지 않는 것 같습니다. 즉, 모드 "U"(텍스트 모드 + 범용)로 작성하기 위해 GZIP 파일을 열어도 각 쓰기에 대해 변환이 수행되지 않습니다.

Windows 플랫폼을 사용하고 Windows 사용자를 대상으로하는 경우 메모장과 같은 두뇌 편집자가 올바르게 렌더링되도록 '\ r \ n'을 명시 적으로 작성하는 이식성이없는 솔루션을 고려할 수 있습니다. 이런 결과가 당신이 찾고있는 결과를 얻을 것이라고 추측합니다 :