简体   繁体   中英

migrate str.translate from Python 2 to Python 3

I am trying to write a function to return True if a string that is passed to it is binary. How can i run this Python 2.x code under Python 3.4.3? This is the error I am getting:

TypeError: translate() takes exactly one argument (2 given)

the code:

textchars = bytearray([0,7,8,9,10,12,13,27]) + bytearray(range(0x20, 0x100))
is_binary_string = lambda data: bool(data.translate(None,textchars))

I read up on the documentation for str.maketrans() but don't understand how to incorporate it into the code.

In Python 3.4 , you no longer have deletechars param , instead you can pass a dictionary of mappings to str.translate() , and for all elements that you want to delete, you can use empty string '' as the value. In your case, the code would become -

from itertools import zip_longest
textchars = bytearray([0,7,8,9,10,12,13,27]) + bytearray(range(0x20, 0x100))
textdict = dict(zip_longest(textchars,[''],fillvalue=''))
is_binary_string = lambda data: bool(data.translate(textdict))

The above code would assign empty string to all elements in textchars , since that is what you want as well.


Example/Demo -

>>> textchars = bytearray([0,7,8,9,10,12,13,27]) + bytearray(range(0x20, 0x100))
>>> from itertools import zip_longest
>>> textdict = dict(zip_longest(textchars,[''],fillvalue=''))
>>> pprint.pprint(textdict)
{0: '',
 7: '',
 8: '',
 9: '',
 10: '',
 12: '',
 13: '',
 27: '',
 32: '',
 33: '',
 34: '',
 35: '',
 36: '',
 37: '',
 38: '',
 39: '',
 40: '',
 41: '',
 42: '',
 43: '',
 44: '',
 45: '',
 46: '',
 47: '',
 48: '',
 49: '',
 50: '',
 51: '',
 52: '',
 53: '',
 54: '',
 55: '',
 56: '',
 57: '',
 58: '',
 59: '',
 60: '',
 61: '',
 62: '',
 63: '',
 64: '',
 65: '',
 66: '',
 67: '',
 68: '',
 69: '',
 70: '',
 71: '',
 72: '',
 73: '',
 74: '',
 75: '',
 76: '',
 77: '',
 78: '',
 79: '',
 80: '',
 81: '',
 82: '',
 83: '',
 84: '',
 85: '',
 86: '',
 87: '',
 88: '',
 89: '',
 90: '',
 91: '',
 92: '',
 93: '',
 94: '',
 95: '',
 96: '',
 97: '',
 98: '',
 99: '',
 100: '',
 101: '',
 102: '',
 103: '',
 104: '',
 105: '',
 106: '',
 107: '',
 108: '',
 109: '',
 110: '',
 111: '',
 112: '',
 113: '',
 114: '',
 115: '',
 116: '',
 117: '',
 118: '',
 119: '',
 120: '',
 121: '',
 122: '',
 123: '',
 124: '',
 125: '',
 126: '',
 127: '',
 128: '',
 129: '',
 130: '',
 131: '',
 132: '',
 133: '',
 134: '',
 135: '',
 136: '',
 137: '',
 138: '',
 139: '',
 140: '',
 141: '',
 142: '',
 143: '',
 144: '',
 145: '',
 146: '',
 147: '',
 148: '',
 149: '',
 150: '',
 151: '',
 152: '',
 153: '',
 154: '',
 155: '',
 156: '',
 157: '',
 158: '',
 159: '',
 160: '',
 161: '',
 162: '',
 163: '',
 164: '',
 165: '',
 166: '',
 167: '',
 168: '',
 169: '',
 170: '',
 171: '',
 172: '',
 173: '',
 174: '',
 175: '',
 176: '',
 177: '',
 178: '',
 179: '',
 180: '',
 181: '',
 182: '',
 183: '',
 184: '',
 185: '',
 186: '',
 187: '',
 188: '',
 189: '',
 190: '',
 191: '',
 192: '',
 193: '',
 194: '',
 195: '',
 196: '',
 197: '',
 198: '',
 199: '',
 200: '',
 201: '',
 202: '',
 203: '',
 204: '',
 205: '',
 206: '',
 207: '',
 208: '',
 209: '',
 210: '',
 211: '',
 212: '',
 213: '',
 214: '',
 215: '',
 216: '',
 217: '',
 218: '',
 219: '',
 220: '',
 221: '',
 222: '',
 223: '',
 224: '',
 225: '',
 226: '',
 227: '',
 228: '',
 229: '',
 230: '',
 231: '',
 232: '',
 233: '',
 234: '',
 235: '',
 236: '',
 237: '',
 238: '',
 239: '',
 240: '',
 241: '',
 242: '',
 243: '',
 244: '',
 245: '',
 246: '',
 247: '',
 248: '',
 249: '',
 250: '',
 251: '',
 252: '',
 253: '',
 254: '',
 255: ''}
>>> 'abcdef'.translate(textdict)
''

If data is a byte-string, then you can still use the previous code from `Python 2.x here - Example -

>>> textchars = bytearray([0,7,8,9,10,12,13,27]) + bytearray(range(0x20, 0x100))
>>> b'abcdefasdas'.translate(None,textchars)
b''

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM