繁体   English   中英

将str.translate从Python 2迁移到Python 3

[英]migrate str.translate from Python 2 to Python 3

我正在尝试编写一个函数,如果传递给它的字符串是二进制的,则返回True。 我如何在Python 3.4.3下运行此Python 2.x代码? 这是我得到的错误:

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

编码:

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

我阅读了str.maketrans()的文档,但不了解如何将其合并到代码中。

在Python 3.4中,您不再具有deletechars param,而是可以将映射字典传递给str.translate() ,对于要删除的所有元素,可以使用空字符串''作为值。 就您而言,代码将变成-

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))

上面的代码将空字符串分配给textchars所有元素,因为这也是您想要的。


示例/演示-

>>> 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)
''

如果数据是字节字符串,那么您仍然可以在此处使用来自Python 2.x的先前代码-示例-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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