Error when trying to encode

Haris Saric

Why can't I use sourcecode = "myFile.txt" f = open(sourcecode, mode='rb') to open my file and compress it? This is all pretty new to me. I would be glad if some of you could give me some advice on how to solve the problem.

def compress(uncompressed):
    """Compress a string to a list of output symbols."""

    sourcecode = "myFile.txt"
    f = open(sourcecode, mode='rb')   

    # Build the dictionary.
    dict_size = 256
    dictionary = dict((chr(i), chr(i)) for i in xrange(dict_size))
    # in Python 3: dictionary = {chr(i): chr(i) for i in range(dict_size)}

    w = ""
    result = []
    for c in uncompressed:
        wc = w + c
        if wc in dictionary:
            w = wc
        else:
            result.append(dictionary[w])
            # Add wc to the dictionary.
            dictionary[wc] = dict_size
            dict_size += 1
            w = c

    # Output the code for w.
    if w:
        result.append(dictionary[w])
    return result



def decompress(compressed):
    """Decompress a list of output ks to a string."""

    # Build the dictionary.
    dict_size = 256
    dictionary = dict((chr(i), chr(i)) for i in xrange(dict_size))
    # in Python 3: dictionary = {chr(i): chr(i) for i in range(dict_size)}

    w = result = compressed.pop(0)
    for k in compressed:
        if k in dictionary:
            entry = dictionary[k]
        elif k == dict_size:
            entry = w + w[0]
        else:
            raise ValueError('Bad compressed k: %s' % k)
        result += entry

        # Add w+entry[0] to the dictionary.
        dictionary[dict_size] = w + entry[0]
        dict_size += 1

        w = entry
    return result

compressed = compress(f)
print (compressed)
decompressed = decompress(compressed)
print (decompressed)

I found this code at: http://rosettacode.org/wiki/LZW_compression#Python

Cantfindname

One problem is the fact that you open the file inside the compress function. That means that f is not visible outside the function, and therefore calling compress(f) will give you an error that it does not find f. The correct syntax would be to move the lines sourcecode = "myFile.txt" and f = open(sourcecode, mode='rb') there, so that you have:

sourcecode = "myFile.txt"
f = open(sourcecode, mode='rb') 
compressed = compress(f.read())
f.close() # don't forget to close open files

Notice the f.read() when calling compress. f by itself is a file descriptor, f.read() is the one that returns the contents of the file as a string to be given as an argument to compress()

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

TOP Ranking

HotTag

Archive