1
- #!/usr/bin/env python
1
+ #!/usr/bin/env python3
2
2
##
3
3
## skk2cdb.py - convertion tool for SKK dictionary.
4
4
## by Yusuke Shinyama
16
16
import sys , os
17
17
from struct import pack , unpack
18
18
from array import array
19
+ from functools import reduce
19
20
20
21
21
22
# calc hash value with a given key
22
- def cdbhash (s , n = 0L ):
23
- return reduce (lambda h ,c : ((h * 33 ) ^ ord (c )) & 0xffffffffL , s , n + 5381L )
23
+ def cdbhash (s , n = 0 ):
24
+ return reduce (lambda h ,c : ((h * 33 ) ^ ord (c )) & 0xffffffff , s , n + 5381 )
24
25
25
26
if pack ('=i' ,1 ) == pack ('>i' ,1 ):
26
27
# big endian
@@ -64,7 +65,7 @@ def __init__(self, cdbname, docache=1):
64
65
self .name = cdbname
65
66
self ._fp = file (cdbname , 'rb' )
66
67
hash0 = decode (self ._fp .read (2048 ))
67
- self ._hash0 = [ (hash0 [i ], hash0 [i + 1 ]) for i in xrange (0 , 512 , 2 ) ]
68
+ self ._hash0 = [ (hash0 [i ], hash0 [i + 1 ]) for i in range (0 , 512 , 2 ) ]
68
69
self ._hash1 = [ None ] * 256
69
70
(self ._eod ,_ ) = self ._hash0 [0 ]
70
71
self ._docache = docache
@@ -93,7 +94,7 @@ def __getitem__(self, k):
93
94
self ._hash1 [h1 ] = hs
94
95
i = ((h >> 8 ) % ncells ) * 2
95
96
n = ncells * 2
96
- for _ in xrange (ncells ):
97
+ for _ in range (ncells ):
97
98
p1 = hs [i + 1 ]
98
99
if p1 == 0 : raise KeyError (k )
99
100
if hs [i ] == h :
@@ -122,7 +123,7 @@ def has_key(self, k):
122
123
return False
123
124
124
125
def __contains__ (self , k ):
125
- return self . has_key ( k )
126
+ return k in self
126
127
127
128
def firstkey (self ):
128
129
self ._keyiter = None
@@ -132,15 +133,15 @@ def nextkey(self):
132
133
if not self ._keyiter :
133
134
self ._keyiter = ( k for (k ,v ) in cdbiter (self ._fp , self ._eod ) )
134
135
try :
135
- return self ._keyiter . next ( )
136
+ return next ( self ._keyiter )
136
137
except StopIteration :
137
138
return None
138
139
139
140
def each (self ):
140
141
if not self ._eachiter :
141
142
self ._eachiter = cdbiter (self ._fp , self ._eod )
142
143
try :
143
- return self ._eachiter . next ( )
144
+ return next ( self ._eachiter )
144
145
except StopIteration :
145
146
return None
146
147
@@ -161,7 +162,7 @@ def __init__(self, cdbname, tmpname):
161
162
self .numentries = 0
162
163
self ._fp = file (tmpname , 'wb' )
163
164
self ._pos = 2048 # sizeof((h,p))*256
164
- self ._bucket = [ array ('I' ) for _ in xrange (256 ) ]
165
+ self ._bucket = [ array ('I' ) for _ in range (256 ) ]
165
166
return
166
167
167
168
def __len__ (self ):
@@ -197,7 +198,7 @@ def finish(self):
197
198
if not b1 : continue
198
199
blen = len (b1 )
199
200
a = array ('I' , [0 ]* blen * 2 )
200
- for j in xrange (0 , blen , 2 ):
201
+ for j in range (0 , blen , 2 ):
201
202
(h ,p ) = (b1 [j ],b1 [j + 1 ])
202
203
i = ((h >> 8 ) % blen )* 2
203
204
while a [i + 1 ]: # is cell[i] already occupied?
@@ -248,7 +249,7 @@ def cdbmerge(iters):
248
249
q = []
249
250
for it in iters :
250
251
try :
251
- q .append ((it . next (),it ))
252
+ q .append ((next (it ),it ))
252
253
except StopIteration :
253
254
pass
254
255
k0 = None
@@ -262,7 +263,7 @@ def cdbmerge(iters):
262
263
vs .append (v )
263
264
k0 = k
264
265
try :
265
- q .append ((it . next (),it ))
266
+ q .append ((next (it ),it ))
266
267
except StopIteration :
267
268
continue
268
269
if vs : yield (k0 ,vs )
@@ -280,7 +281,7 @@ def main(argv):
280
281
import fileinput
281
282
import os .path
282
283
def usage ():
283
- print 'usage: %s [-f] outfile [infile ...]' % argv [0 ]
284
+ print ( 'usage: %s [-f] outfile [infile ...]' % argv [0 ])
284
285
return 100
285
286
try :
286
287
(opts , args ) = getopt .getopt (argv [1 :], 'dfo:' )
@@ -292,7 +293,7 @@ def usage():
292
293
if not args : return usage ()
293
294
outfile = args .pop (0 )
294
295
if not force and os .path .exists (outfile ):
295
- print >> sys . stderr , 'file exists: %r' % outfile
296
+ print ( 'file exists: %r' % outfile , file = sys . stderr )
296
297
return 1
297
298
#
298
299
maker = CDBMaker (outfile , outfile + '.tmp' )
0 commit comments