Check that files don't contain Unicode
Your problem specification is unclear, and the code may be wrong as a result.  What exactly do you mean by "Unicode characters"?  What if a file contains just two bytes, 0x20 and 0x5D — is that two ASCII characters (a Space  and a Right Square Bracket ]), or is that one UTF-16 character (U+205D Tricolon ⁝)?

Unless you have a clear definition of what you mean by "Unicode", and have a special reason for detecting non-ASCII characters specifically, you may be better off opening the file with a latin_1 encoding and just checking is_printable().  In UTF-8, any multibyte sequence will have the leading bit set in all but the last byte, which would place it outside the string.printable range.  You would reject the same files as before, just with a less specific reason given.

For scalability, it would be better to read fixed-size blocks (perhaps around 8 kB) instead of the entire file at once.  It might also be more efficient to check c in set(string.printable) rather than c in string.printable.