Obtaining a list of files to be re-encoded (ideally determining the encoding just once) to_convert_files = [FileEnc(filename, getEncoding(filename)) for
                    filename in filenames if getEncoding(filename) != None]


The problem here is that getEncoding gets called twice for each accepted file name: once in the if clause and once in the expression preceding for. I know I can avoid this by splitting this into a generator expression that does the mapping and a list comprehension that does the filtering, but I was wondering if there is a way keeping it condensed in a one-liner.
Often, list comprehensions can aid readability. But here cramming all that behaviour into a single line is obfuscation. The Pythonic way is to do the simplest and most readable thing possible.

Here, this probably means writing a generator function that uses a normal for loop and skips over elements without an available encoding.

def encoded_files(files):
    for file in files:
        encoding = getEncoding(file)
        if encoding is not None:
            yield FileEnc(file, encoding)

to_convert_files = list(encoded_files(filenames))