""" string.printable.isprintable() returns False string.printable includes all whitespace characters. However, the only whitespace character that is printable is the space (0x20). By definition, the only ASCII characters considered printable are: alphanumeric characters punctuation characters the space character (not all whitespace characters) Source: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03 7.2 POSIX Locale Conforming systems shall provide a POSIX locale, also known as the C locale. 7.3.1 LC_CTYPE space Define characters to be classified as white-space characters. In the POSIX locale, exactly , , , , , and shall be included. cntrl Define characters to be classified as control characters. In the POSIX locale, no characters in classes alpha or print shall be included. graph Define characters to be classified as printable characters, not including the . In the POSIX locale, all characters in classes alpha, digit, and punct shall be included; no characters in class cntrl shall be included. print Define characters to be classified as printable characters, including the . In the POSIX locale, all characters in class graph shall be included; no characters in class cntrl shall be included. LC_CTYPE Category in the POSIX Locale # "print" is by default "alnum", "punct", and the """ import string import sys # 0..127 ascii = frozenset(chr(x) for x in range(128)) assert len(ascii) == 128 ascii_upper = frozenset('ABCDEFGHIJKLMNOPQRSTUVWXYZ') assert len(ascii_upper) == 26 ascii_lower = frozenset('abcdefghijklmnopqrstuvwxyz') assert len(ascii_lower) == 26 ascii_alpha = ascii_upper | ascii_lower assert len(ascii_alpha) == 52 ascii_digit = frozenset('0123456789') assert len(ascii_digit) == 10 ascii_alnum = ascii_alpha | ascii_digit assert len(ascii_alnum) == 62 ascii_xdigit = frozenset('0123456789ABCDEFabcdef') assert len(ascii_xdigit) == 22 ascii_space = frozenset('\t\n\v\f\r ') assert len(ascii_space) == 6 ascii_blank = frozenset(' \t') assert len(ascii_blank) == 2 # '!'..'~' ascii_graph = frozenset(chr(x) for x in range(33, 127)) assert len(ascii_graph) == 94 # ' '..'~' ascii_print = frozenset(chr(x) for x in range(32, 127)) assert len(ascii_print) == 95 # 0..31, 127 ascii_cntrl = frozenset(chr(x) for x in range(32)) | frozenset(chr(127)) assert len(ascii_cntrl) == 33 ascii_punct = ascii_graph - ascii_alnum assert len(ascii_punct) == 32 my_printable = ''.join(sorted(ascii_print)) print("sys.version: {}".format(sys.version)) print("Not in ascii_alpha : {}".format(sorted(frozenset(string.ascii_letters ) - ascii_alpha ))) print("Not in ascii_lower : {}".format(sorted(frozenset(string.ascii_lowercase) - ascii_lower ))) print("Not in ascii_upper : {}".format(sorted(frozenset(string.ascii_uppercase) - ascii_upper ))) print("Not in ascii_digit : {}".format(sorted(frozenset(string.digits ) - ascii_digit ))) print("Not in ascii_xdigit: {}".format(sorted(frozenset(string.hexdigits ) - ascii_xdigit))) print("Not in ascii_print : {}".format(sorted(frozenset(string.printable ) - ascii_print ))) print("Not in ascii_punct : {}".format(sorted(frozenset(string.punctuation ) - ascii_punct ))) print("Not in ascii_space : {}".format(sorted(frozenset(string.whitespace ) - ascii_space ))) print("Not in string.ascii_letters : {}".format(sorted(ascii_alpha - frozenset(string.ascii_letters )))) print("Not in string.ascii_lowercase: {}".format(sorted(ascii_lower - frozenset(string.ascii_lowercase)))) print("Not in string.ascii_uppercase: {}".format(sorted(ascii_upper - frozenset(string.ascii_uppercase)))) print("Not in string.digits : {}".format(sorted(ascii_digit - frozenset(string.digits )))) print("Not in string.hexdigits : {}".format(sorted(ascii_xdigit - frozenset(string.hexdigits )))) print("Not in string.printable : {}".format(sorted(ascii_print - frozenset(string.printable )))) print("Not in string.punctuation : {}".format(sorted(ascii_punct - frozenset(string.punctuation )))) print("Not in string.whitespace : {}".format(sorted(ascii_space - frozenset(string.whitespace )))) print("(string.ascii_letters + string.digits).isalnum()? {}".format((string.ascii_letters + string.digits).isalnum())) print("string.ascii_letters.isalpha()? {}".format(string.ascii_letters.isalpha())) print("string.digits.isdigit()? {}".format(string.digits.isdigit())) print("string.ascii_lowercase.islower()? {}".format(string.ascii_lowercase.islower())) print("string.printable.isprintable()? {}".format(string.printable.isprintable())) print("string.whitespace.isspace()? {}".format(string.whitespace.isspace())) print("string.ascii_uppercase.isupper()? {}".format(string.ascii_uppercase.isupper())) print("my_printable.isprintable()? {}".format(my_printable.isprintable())) """ Output: sys.version: 3.4.2 (default, Oct 8 2014, 13:18:07) [GCC 4.9.1] Not in ascii_alpha : [] Not in ascii_lower : [] Not in ascii_upper : [] Not in ascii_digit : [] Not in ascii_xdigit: [] Not in ascii_print : ['\t', '\n', '\x0b', '\x0c', '\r'] Not in ascii_punct : [] Not in ascii_space : [] Not in string.ascii_letters : [] Not in string.ascii_lowercase: [] Not in string.ascii_uppercase: [] Not in string.digits : [] Not in string.hexdigits : [] Not in string.printable : [] Not in string.punctuation : [] Not in string.whitespace : [] (string.ascii_letters + string.digits).isalnum()? True string.ascii_letters.isalpha()? True string.digits.isdigit()? True string.ascii_lowercase.islower()? True string.printable.isprintable()? False string.whitespace.isspace()? True string.ascii_uppercase.isupper()? True my_printable.isprintable()? True """