title: How do I optimize the speed of my python compression code?
body: <p>I have made a compression code, and have tested it on 10 KB text files, which took no less than 3 minutes. However, I've tested it with a 1 MB file, which is the assessment assigned by my teacher, and it takes longer than half an hour. Compared to my classmates, mine is irregularly long. It might be my computer or my code, but I have no idea. Does anyone know any tips or shortcuts into making the speed of my code shorter? My compression code is below, if there are any quicker ways of doing loops, etc. please send me an answer (:</p>
  
  <p>(by the way my code DOES work, so I'm not asking for corrections, just enhancements, or tips, thanks!)</p>
  
  <pre><code>import re #used to enable functions(loops, etc.) to find patterns in text file
  import os #used for anything referring to directories(files)
  from collections import Counter #used to keep track on how many times values are added
  
  size1 = os.path.getsize('file.txt') #find the size(in bytes) of your file,    INCLUDING SPACES
  print('The size of your file is ', size1,)
  
  words = re.findall('\w+', open('file.txt').read()) 
  wordcounts = Counter(words) #turns all words into array, even capitals 
  common100 = [x for x, it in Counter(words).most_common(100)] #identifies the 200 most common words
  
  keyword = []
  kcount = []
  z = dict(wordcounts)
  for key, value in z.items():
      keyword.append(key) #adds each keyword to the array called keywords
      kcount.append(value)
  
  characters =['$','#','@','!','%','^','&amp;','*','(',')','~','-','/','{','[', ']', '+','=','}','|', '?','cb',
           'dc','fd','gf','hg','kj','mk','nm','pn','qp','rq','sr','ts','vt','wv','xw','yx','zy','bc',
           'cd','df','fg','gh','jk','km','mn','np','pq','qr','rs','st','tv','vw','wx','xy','yz','cbc',
           'dcd','fdf','gfg','hgh','kjk','mkm','nmn','pnp','qpq','rqr','srs','tst','vtv','wvw','xwx',
           'yxy','zyz','ccb','ddc','ffd','ggf','hhg','kkj','mmk','nnm','ppn','qqp','rrq','ssr','tts','vvt',
           'wwv','xxw','yyx''zzy','cbb','dcc','fdd','gff','hgg','kjj','mkk','nmm','pnn','qpp','rqq','srr',
           'tss','vtt','wvv','xww','yxx','zyy','bcb','cdc','dfd','fgf','ghg','jkj','kmk','mnm','npn','pqp',
           'qrq','rsr','sts','tvt','vwv','wxw','xyx','yzy','QRQ','RSR','STS','TVT','VWV','WXW','XYX','YZY',
          'DC','FD','GF','HG','KJ','MK','NM','PN','QP','RQ','SR','TS','VT','WV','XW','YX','ZY','BC',
           'CD','DF','FG','GH','JK','KM','MN','NP','PQ','QR','RS','ST','TV','VW','WX','XY','YZ','CBC',
           'DCD','FDF','GFG','HGH','KJK','MKM','NMN','PNP','QPQ','RQR','SRS','TST','VTV','WVW','XWX',
           'YXY','ZYZ','CCB','DDC','FFD','GGF','HHG','KKJ','MMK','NNM','PPN','QQP','RRQ','SSR','TTS','VVT',
           'WWV','XXW','YYX''ZZY','CBB','DCC','FDD','GFF','HGG','KJJ','MKK','NMM','PNN','QPP','RQQ','SRR',
           'TSS','VTT','WVV','XWW','YXX','ZYY','BCB','CDC','DFD','FGF','GHG','JKJ','KMK','MNM','NPN','PQP',] #characters which I can use
  
  symbols_words = []
  char = 0
  for i in common100:
      symbols_words.append(characters[char]) #makes the array literally contain 0 values
          char = char + 1
  
  print("Compression has now started")
  
  f = 0
  g = 0
  no = 0
  while no &lt; 100:
      for i in common100:
          for w in words:
              if i == w and len(i)&gt;1: #if the values in common200 are ACTUALLY in words
                  place = words.index(i)#find exactly where the most common words are in the text
                  symbols = symbols_words[common100.index(i)] #assigns one character with one common word
                  words[place] = symbols # replaces the word with the symbol
                  g = g + 1
      no = no + 1
  
  
  string = words
  stringMade = ' '.join(map(str, string))#makes the list into a string so you can put it into a text file
  file = open("compression.txt", "w")
  file.write(stringMade)#imports everything in the variable 'words' into the new file
  file.close()
  
  size2 = os.path.getsize('compression.txt')
  
  no1 = int(size1)
  no2 = int(size2)
  print('Compression has finished.')
  print('Your original file size has been compressed by', 100 - ((100/no1) * no2 ) ,'percent.'
    'The size of your file now is ', size2)
  </code></pre>