2017-05-08 49 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)