[英]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.