2017-12-11 22 views
0

에 파일을 저장하는 방법. 내 시작 목록의 형식은 다음과 같습니다내가 피클을 사용하여 파일에 일부 데이터를 저장하기 위해 노력하고 가능한 가장 낮은 무게

a1 = [[190, 187, 27, 24, 4, 1, 0, 2, 6, 9, 60, 62], [190, 187, 27, 24, 4, 1, 0, 2, 6, 9, 61, 65], [190, 187, 27, 24, 4, 1, 0, 2, 6, 9, 60, 63], [190, 187, 27, 24, 4, 1, 0, 2, 6, 9, 61, 65], [190, 187, 27, 24, 4, 1, 0, 2, 6, 8, 48, 50], [190, 187, 27, 24, 4, 1, 0, 2, 6, 9, 61, 64], [190, 187, 27, 24, 4, 1, 0, 2, 6, 8, 48, 51]] 

하위 목록에서 첫 번째와 마지막 자리를 떠난 후 :

a2 = [[190, 62], [190, 65], [190, 63], [190, 65], [190, 50], [190, 64], [190, 51]] 

을 그리고 내 기본-32 코딩 후 :

a3 = [['5x', '1x'], ['5x', '21'], ['5x', '1c'], ['5x', '21'], ['5x', '1o'], ['5x', '20'], ['5x', '1p']] 

목록 'a1'이있는 파일은 224 바이트이고 목록 'a2'는 84 바이트이며 목록 'a3'은 182 바이트입니다. 'a3'목록이있는 파일이 'a2'목록이있는 파일보다 큰 이유는 무엇입니까? 따옴표로 파일을 확대합니까? 예를 들어, "배"가 "190"이하를 취할 것이며, 동시에 전체 파일의 무게를 줄일 수, 나에게 보였다. 이러한 데이터를 파일에 저장하는보다 효과적인 다른 방법이 있습니까?

+1

따옴표는 문자열 리터럴을 나타냅니다. 당신은 문자열을 저장하고 있습니다. '190'은 정수이고 아마도 32 비트를 사용합니다. "190"은 32 비트, 문자 당 8 비트 및 널 종결자를 사용하는 문자 스트링입니다. 이것은 대략적인 견적이며 다른 사람이 더 나은 참조로 답할 수 있어야합니다. –

답변

3

그것은 그것이로 표시해야합니다 있도록이 문자열의 사실이다, 크기를 증가 따옴표 아니라 같은 - optcodes를 통해, 절인 때.

피클은 정말 산세 동안 적어도 protocol=2을 사용하지 않는 매우 공간 효율적인 (또는 빠른) 수 없습니다. 당신은 (압축없이) 최소 크기 후 경우 문자열을 저장하는 동안

, CSV는 그것을 수행해야합니다

import csv 

a3 = [['5x', '1x'], ['5x', '21'], ['5x', '1c'], ['5x', '21'], ['5x', '1o'], 
     ['5x', '20'], ['5x', '1p']] 

with open("saved_data.csv", "wt", newline="") as f: 
    writer = csv.writer(f) 
    writer.writerows(a3) 

이것은 49 바이트 CSV 파일 (saved_data.csv)을 생성하고 당신이 낮은 얻을 수 없다 압축하지 않고보다. 비교해 보면, 심지어 protocol=4으로 산세 처리하는 경우이 데이터에 대해 93 바이트가 소요됩니다.

+0

설명 주셔서 감사합니다! –

+0

Meh ... 해당 데이터를 ** 14 ** 바이트로 쉽게 인코딩 할 수 있습니다. (모든 하위 목록의 첫 번째 값이 동일하다는 사실조차 사용하지 않습니다.) –

+0

흥미 롭습니다. 방법? –