Given a very large string. I would like to process parts of the string in a loop like this:
large_string = "foobar..."
while large_string:
process(large_string.pop(200))
What is a nice and efficient way of doing this?
Given a very large string. I would like to process parts of the string in a loop like this:
large_string = "foobar..."
while large_string:
process(large_string.pop(200))
What is a nice and efficient way of doing this?
You can wrap the string in a StringIO
or BytesIO
and pretend it's a file. That should be pretty fast.
from cStringIO import StringIO
# or, in Py3/Py2.6+:
#from io import BytesIO, StringIO
s = StringIO(large_string)
while True:
chunk = s.read(200)
if len(chunk) > 0:
process(chunk)
if len(chunk) < 200:
break
[large_string[i:i+200] for i in xrange(0, len(large_string), 200)]
–
Chartulary s.seek(-200, 2); chunk = s.read()
... –
Bendicta io.StringIO
- it exists from 2.6. –
Bobbobb pop
is that it discards the elements it returns, releasing the memory they occupied. StringIO
does not discard the parts of the string that were already read. Is there a way to get this aspect of the pop
functionality for strings? –
Milkmaid you can convert the string to a list. list(string)
and pop it, or you could iterate in chunks slicing the list []
or you can slice the string as is and iterate in chunks
You can do this with slicing:
large_string = "foobar..."
while large_string:
process(large_string[-200:])
large_string = large_string[:-200]
To follow up on dm03514's answer, you can do something like this:
output = ""
ex = "hello"
exList = list(ex)
exList.pop(2)
for letter in exList:
output += letter
print output # Prints 'helo'
© 2022 - 2024 — McMap. All rights reserved.