George Sakkis produced the following cookbook recipe,
which addresses a common problem that comes up on this
mailing list: http://aspn.activestate.com/ASPN/Coo.../Recipe/521877
I would propose adding something like this to the
cookbook example above.
def iterblocks2(lst, start_delim):
# This variation on iterblocks shows a more
typical
# implementation that behaves like iterblocks for
# the Hello World example. The problem with this
naive
# implementation is that you cannot pass arbitrary
# iterators.
blocks = []
new_block = []
for item in lst:
if start_delim(item):
if new_block: blocks.append(new_block)
new_block = []
else:
new_block.append(item)
if new_block: blocks.append(new_block)
return blocks
Comments welcome. This has been tested on George's
slow-version-of-string-split example. It treates the
delimiter as not being part of the block, and it punts
on the issue of what to do when you have empty blocks
(i.e. consecutive delimiters).
__________________________________________________ __________________________________
Be a better Heartthrob. Get better relationship answers from someone who knows. Yahoo! Answers - Check it out. http://answers.yahoo.com/dir/?link=list&sid=396545433 3 1435
On Jun 2, 10:19 am, Steve Howell <showel...@yahoo.comwrote:
George Sakkis produced the following cookbook recipe,
which addresses a common problem that comes up on this
mailing list:
ISTM, this is a common mailing list problem because it is fun
to solve, not because people actually need it on a day-to-day basis.
In that spirit, it would be fun to compare several different
approaches to the same problem using re.finditer, itertools.groupby,
or the tokenize module. To get the ball rolling, here is one variant:
from itertools import groupby
def blocks(s, start, end):
def classify(c, ingroup=[0], delim={start:2, end:3}):
result = delim.get(c, ingroup[0])
ingroup[0] = result in (1, 2)
return result
return [tuple(g) for k, g in groupby(s, classify) if k == 1]
print blocks('the <quickbrown <foxjumped', start='<', end='>')
One observation is that groupby() is an enormously flexible tool.
Given a well crafted key= function, it makes short work of almost
any data partitioning problem.
Raymond
On Jun 2, 10:47 pm, Raymond Hettinger <pyt...@rcn.comwrote:
On Jun 2, 10:19 am, Steve Howell <showel...@yahoo.comwrote:
George Sakkis produced the following cookbook recipe,
which addresses a common problem that comes up on this
mailing list:
ISTM, this is a common mailing list problem because it is fun
to solve, not because people actually need it on a day-to-day basis.
In that spirit, it would be fun to compare several different
approaches to the same problem using re.finditer, itertools.groupby,
or the tokenize module. To get the ball rolling, here is one variant:
from itertools import groupby
def blocks(s, start, end):
def classify(c, ingroup=[0], delim={start:2, end:3}):
result = delim.get(c, ingroup[0])
ingroup[0] = result in (1, 2)
return result
return [tuple(g) for k, g in groupby(s, classify) if k == 1]
print blocks('the <quickbrown <foxjumped', start='<', end='>')
One observation is that groupby() is an enormously flexible tool.
Given a well crafted key= function, it makes short work of almost
any data partitioning problem.
Can anyone suggest a function that will split text by paragraphs, but
NOT if the paragraphs are contained within a
...
construct. In other words, the following text should yield 3 blocks
not 6:
TEXT = '''
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Pellentesque dolor quam, dignissim ornare, porta et,
auctor eu, leo. Phasellus malesuada metus id magna.
Only when flight shall soar
not for its own sake only
up into heaven's lonely
silence, and be no more
merely the lightly profiling,
proudly successful tool,
playmate of winds, beguiling
time there, careless and cool:
only when some pure Whither
outweighs boyish insistence
on the achieved machine
will who has journeyed thither
be, in that fading distance,
all that his flight has been.
Integer urna nulla, tempus sit amet, ultrices interdum,
rhoncus eget, ipsum. Cum sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus.
'''
Other info:
* don't worry about nesting
* the
and
musn't be stripped.
Gerard
On Jun 4, 1:52 pm, Gerard Flanagan <grflana...@yahoo.co.ukwrote:
On Jun 2, 10:47 pm, Raymond Hettinger <pyt...@rcn.comwrote:
On Jun 2, 10:19 am, Steve Howell <showel...@yahoo.comwrote:
George Sakkis produced the following cookbook recipe,
which addresses a common problem that comes up on this
mailing list:
ISTM, this is a common mailing list problem because it is fun
to solve, not because people actually need it on a day-to-day basis.
In that spirit, it would be fun to compare several different
approaches to the same problem using re.finditer, itertools.groupby,
or the tokenize module. To get the ball rolling, here is one variant:
from itertools import groupby
def blocks(s, start, end):
def classify(c, ingroup=[0], delim={start:2, end:3}):
result = delim.get(c, ingroup[0])
ingroup[0] = result in (1, 2)
return result
return [tuple(g) for k, g in groupby(s, classify) if k == 1]
print blocks('the <quickbrown <foxjumped', start='<', end='>')
One observation is that groupby() is an enormously flexible tool.
Given a well crafted key= function, it makes short work of almost
any data partitioning problem.
Can anyone suggest a function that will split text by paragraphs, but
NOT if the paragraphs are contained within a
...
construct. In other words, the following text should yield 3 blocks
not 6:
TEXT = '''
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Pellentesque dolor quam, dignissim ornare, porta et,
auctor eu, leo. Phasellus malesuada metus id magna.
Only when flight shall soar
not for its own sake only
up into heaven's lonely
silence, and be no more
merely the lightly profiling,
proudly successful tool,
playmate of winds, beguiling
time there, careless and cool:
only when some pure Whither
outweighs boyish insistence
on the achieved machine
will who has journeyed thither
be, in that fading distance,
all that his flight has been.
Integer urna nulla, tempus sit amet, ultrices interdum,
rhoncus eget, ipsum. Cum sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus.
'''
Other info:
* don't worry about nesting
* the
and
musn't be stripped.
Gerard
(Sorry if I ruined the parent thread.) FWIW, I didn't get a groupby
solution but with some help from the Python Cookbook (O'Reilly), I
came up with the following:
import re
RE_START_BLOCK = re.compile('^\[[\w|\s]*\]$')
RE_END_BLOCK = re.compile('^\[/[\w|\s]*\]$')
def iter_blocks(lines):
block = []
inblock = False
for line in lines:
if line.isspace():
if inblock:
block.append(line)
elif block:
yield block
block = []
else:
if RE_START_BLOCK.match(line):
inblock = True
elif RE_END_BLOCK.match(line):
inblock = False
block.append(line.lstrip())
if block:
yield block This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Ringwraith |
last post by:
Hello!
I want to ask You the question about the licence of ASPN online Python
Cookbook recipes. Under what licence are those recipes. If I want to use in
my application some parts of the code...
|
by: Raaijmakers, Vincent \(GE Infrastructure\) |
last post by:
My web server (apache+mod_python) needs to reply on some session with a multipart connection.
My idea is to use the content-type of multipart/mixed; boundary=--myboundary
The data that I would...
|
by: Alex Martelli |
last post by:
Greetings, fellow Pythonistas!
We (Alex Martelli, David Ascher and Anna Martelli Ravenscroft) are in
the process of selecting recipes for the Second Edition of the Python
Cookbook. Please...
|
by: magoldfish |
last post by:
Hi,
I've installed Python 2.4 on Windows XP and walked through the Alex
Martelli ASPN cookbook example at:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66509
This is a recipe for...
|
by: TechBookReport |
last post by:
TechBookReport (http://www.techbookreport.com) has just published a
review of the Python Cookbook. This is an extract from the full review:
We're big fans of cookbooks here at TechBookReport,...
|
by: Frederick Noronha \(FN\) |
last post by:
---------- Forwarded message ----------
Solutions to Everyday User Interface and Programming Problems
O'Reilly Releases "Access Cookbook, Second Edition"
Sebastopol, CA--Neither reference book...
|
by: jonas |
last post by:
Hi,
After a search on
http://pleac.sourceforge.net/pleac_c++/index.html
why C++/STL/Boost have a low %?
I have also wondered about this, being a newbie.
Is it mostly because:
1) All the...
|
by: robert maas, see http://tinyurl.com/uh3t |
last post by:
I'm working on examples of programming in several languages, all
(except PHP) running under CGI so that I can show both the source
files and the actually running of the examples online. The first...
|
by: kj |
last post by:
I'm looking for "example implementations" of small projects in
Python, similar to the ones given at the end of most chapters of
The Perl Cookbook (2nd edition, isbn: 0596003137). (Unfortunately,...
|
by: lllomh |
last post by:
Define the method first
this.state = {
buttonBackgroundColor: 'green',
isBlinking: false, // A new status is added to identify whether the button is blinking or not
}
autoStart=()=>{
|
by: Aliciasmith |
last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
|
by: tracyyun |
last post by:
Hello everyone,
I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
|
by: giovanniandrean |
last post by:
The energy model is structured as follows and uses excel sheets to give input data:
1-Utility.py contains all the functions needed to calculate the variables and other minor things (mentions...
|
by: NeoPa |
last post by:
Hello everyone.
I find myself stuck trying to find the VBA way to get Access to create a PDF of the currently-selected (and open) object (Form or Report).
I know it can be done by selecting :...
|
by: NeoPa |
last post by:
Introduction
For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
|
by: nia12 |
last post by:
Hi there,
I am very new to Access so apologies if any of this is obvious/not clear.
I am creating a data collection tool for health care employees to complete. It consists of a number of...
|
by: NeoPa |
last post by:
Introduction
For this article I'll be focusing on the Report (clsReport) class. This simply handles making the calling Form invisible until all of the Reports opened by it have been closed, when it...
|
by: GKJR |
last post by:
Does anyone have a recommendation to build a standalone application to replace an Access database? I have my bookkeeping software I developed in Access that I would like to make available to other...
| |