2017-04-03 14 views
0

파이썬에서 LZW 알고리즘을 사용하여 간단한 텍스트 파일을 인코딩했습니다. 그러나, 나는 그 자체가 거의 많은 공간을 차지하는 write() 함수를 사용하여 .txt 파일에만 문자열을 쓸 수 있다는 것을 깨달았다. 그래서 어떻게 든 실제 정수를 파일에 (어쩌면 다른 형식으로) 쓸 수 있습니까? 적절한 압축을 얻으려면 어떻게해야합니까?데이터 압축을 위해 문자열 대신 파일에 숫자를 씁니까?

readfile = open("C:/Users/Dhruv/Desktop/read.txt", "r") 
writefile = open("C:/Users/Dhruv/Desktop/write.txt", "w") 
content = readfile.read() 
length = len(content) 

codes = [] 
for i in range(0, 256) : 
    codes.append(str(chr(i))) 

current_string = "" 
for i in range(0, length) : 
    temp = current_string + content[i] 
    print(temp) 
    if temp in codes : 
     current_string += content[i] 
    else : 
     codes.append(current_string + content[i]) 
     writefile.write(str(codes.index(current_string)) + " ") 
     current_string = str(content[i]) 
writefile.write(str(codes.index(current_string)) + " ") 
readfile.close() 
writefile.close(); 
+0

'wb' 모드로 쓰기 위해 열린 * 바이너리 파일 *을 의미 할 수 있습니까? –

+0

@AnttiHaapala와 동의하고 "wb"를 사용하여 이진 인코딩으로 bytes()를 보냅니다. http://stackoverflow.com/questions/20955543/python-writing-binary – RobertB

+0

255보다 큰 정수도 저장하고 싶습니다. 어떻게해야합니까? 또한 정수로만 다시 읽으려고합니다. –

답변

1

데이터가 NumPy와 배열로 표현 될 수 있다면, 다음과 같은 기능은 .txt 파일에 정수로 쓸 수 있습니다 :

_hd 파일 이름과 _data입니다
import numpy as np 
def writer(_hd, _data): 
    out_file_name = str(_hd) + '.csv' 
    np.savetxt(out_file_name, _data, fmt='%i') 
    return None 

는 NumPy와 배열 인 . fmt = '% i'은 데이터를 정수로 저장합니다. 다른 옵션도 사용할 수 있습니다 here.