A simple approach without digging on low level implementation of the long type:
>>> n = 17**987273 # 1.2 million digits number
>>> digits = int(math.log10(n))
>>> k = digits - 24 # i.e. first 24 digits
>>> n / (10 ** k)
9953043281569299242668853L
Runs quite fast on my machine. I tried to get the string representation of this number and it takes a huge time.
For Python 3.x, use n // (10 ** k)
Some timings with this big number (It is 140 times faster):
%timeit s = str(n)[:24]
1 loops, best of 3: 57.7 s per loop
%timeit n/10**(int(math.log10(n))-24)
1 loops, best of 3: 412 ms per loop
# With a 200K digits number (51x faster)
%timeit s = str(n)[:24]
1 loops, best of 3: 532 ms per loop
%timeit n/10**(int(math.log10(n))-24)
100 loops, best of 3: 10.4 ms per loop
# With a 20K digits number (19x faster)
%timeit s = str(n)[:24]
100 loops, best of 3: 5.4 ms per loop
%timeit n/10**(int(math.log10(n))-24)
1000 loops, best of 3: 272 us per loop