2017-05-08 52 views
0

有沒有辦法壓縮此代碼中使用的文本。我將不勝感激。
Heya,無論如何要壓縮此代碼中使用的文本。我將不勝感激。如何壓縮文本文件

file = open("Test.txt", "r") 

Sentence = (file.read()) 

s = Sentence.split(" ") 

ListSentence = [] 
uniquewords = [] 
print(Sentence) 
for x in s: 
    if x in uniquewords: 
     ListSentence.append(uniquewords.index(x)) 
    else: 
     uniquewords.append(x) 
     ListSentence.append(uniquewords.index(x)) 
print(ListSentence) 

recreated = "" 
for position in ListSentence: 
    recreated = recreated + uniquewords[position] + " " 
print(uniquewords) 
print (recreated) 
+0

看看例子在[文件](https://docs.python.org/2/library/archiving.html) –

+0

你的代碼是合理的。你可以使用'dict'來加快查詢速度,最後使用''.join()'。風格可以使用一些清理。但它不是一場災難或任何事情。 – tdelaney

回答

1

問題是一種模糊......如果你的意思是數據壓縮,那麼你可以使用二進制變換。

In [1]: import codecs 

In [2]: example = 'abcdefg'*100 

In [3]: compressed = codecs.encode(example.encode(), 'zlib') 

In [4]: compressed 
Out[4]: b'x\x9cKLJNIMKO\x1c\xa5F\xa9\xa1F\x01\x00m\x8e\x11\x80' 

In [5]: decompressed = codecs.decode(compressed, 'zlib') 

In [6]: decompressed 
Out[6]: b'abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg' 

退房的docs編解碼器,底部是二進制的轉換提供了內置的編解碼器。

如果你的意思是壓縮來表達你想要減少代碼行的慾望,那麼當你的代碼的意圖是模糊的時,我會想象你想過濾掉重複的單詞,同時可能保留單詞的順序......

沒有順序:

' '.join(set(sentence.split())) 

隨着順序:

seen = set() 
words = sentence.split() 
new = [] 
for word in words: 
    if word not in seen: 
     seen.add(word) 
     new.append(word) 
unique_ordered = ' '.join(new) 
0

好像你問,如果你能降低C的線噢,你有。這裏是我的嘗試:

with open("Test.txt", "r") as file: 
    Sentence = file.read().split(" ") 
ListSentence, uniquewords = [], [] 
print(Sentence) 
for x in s: 
    if x not in uniquewords: 
     uniquewords.append(x) 
    ListSentence.append(uniquewords.index(x)) # you do this every loop anyway 
print(ListSentence) 

recreated = "" 
for position in ListSentence: 
    recreated += uniquewords[position] + " " 
print(uniquewords) 
print(recreated)