RE: Guido's new method definition idea
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Aaron Brady Sent: Monday, December 08, 2008 3:27 PM To: python-list@python.org Subject: Re: Guido's new method definition idea On Dec 7, 4:23 pm, Philip Slate [EMAIL PROTECTED] wrote: On Dec 7, 1:13 pm, Bruno Desthuilliers [EMAIL PROTECTED] wrote: and friendlier to newbies. I'd rather say more acceptable to java-brainwashed developpers. And I'd rather say you're trolling, but that's ok since you're preaching to the converted. You conveniently forgot to mention the C++/ Eiffel/Smalltalk/pretty-much-every-OO-lang brainwashed developers too. In reality Python, with its kludgy OO and objects being essentially glorified dicts, is the odd one out, not the other way around. That's true. But what would a Python-brainwashed developer be? Anyone who believes that writing beautiful, unencumbered code is efficient, while still believing that discovering type casting errors at runtime isn't grossly inefficient. Or given whitespace delimited code, Python developers believe that nothing is important. ;-) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: parsing MS word docs -- tutorial request
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Tuesday, October 28, 2008 10:26 AM To: python-list@python.org Subject: parsing MS word docs -- tutorial request All, I am trying to write a script that will parse and extract data from a MS Word document. Can / would anyone refer me to a tutorial on how to do that? (perhaps from tables). I am aware of, and have downloaded the pywin32 extensions, but am unsure of how to proceed -- I'm not familiar with the COM API for word, so help for that would also be welcome. Any help would be appreciated. Thanks for your attention and patience. ::bp:: -- http://mail.python.org/mailman/listinfo/python-list Word Object Model: http://msdn.microsoft.com/en-us/library/bb244515.aspx Google for sample code to get you started. -- http://mail.python.org/mailman/listinfo/python-list
RE: Array of dict or lists or ....?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Pat Sent: Tuesday, October 07, 2008 10:16 PM To: python-list@python.org Subject: Re: Array of dict or lists or ? The Perl routine works fine and I'd like to emulate that behavior but since I've just starting learning Python I don't know the syntax for designing the data structure. I would really appreciate it if someone could point me in the right direction. states = {} if 'georgia' not in states: states['georgia'] = {} states['georgia']['fulton'] = {} states['georgia']['fulton']['ps101'] = {} states['georgia']['fulton']['ps101']['math'] = {} states['georgia']['fulton']['ps101']['math']['max'] = 100 states['georgia']['fulton']['ps101']['math']['current'] = 33 states['georgia']['dekalb'] = {} states['georgia']['dekalb']['ps202'] = {} states['georgia']['dekalb']['ps202']['english'] = {} states['georgia']['dekalb']['ps202']['english']['max'] = 500 states['georgia']['dekalb']['ps202']['english']['current'] = 44 print states * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: decent interactive python shell on MS Windows?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Wednesday, October 01, 2008 12:54 PM To: python-list@python.org Subject: decent interactive python shell on MS Windows? Is there an interactive Python shell on Windows that supports: - easy copy-pasting to/from an editor? (as opposed to the cumbersome mark, copy and then paste sequence that any terminal on Windows seems forced to adopt) Just turn QuickEdit on. Create shortcut to CMD.exe (or python.exe.) Right click the short cut, Properties - Options. Check QuickEdit and InsertMode. When you save, choose Apply to all... You can paste by right clicking. To copy just highlight and hit return. - readline-like command history (up/down for previous/next command, Ctr-R for searching, etc) ? CMD has doskey for command history. To search the history, type a few leading characters of the command you want to recall and press F8. Type help doskey for more info. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: Renaming Excel Spreadsheets
Excel object model: http://msdn.microsoft.com/en-us/library/bb149081.aspx I think the Sheets object is where you add more sheets to a workbook. You can google for code examples on how to use COM with Excel. You don't have to limit yourself to Python code examples since COM is generic. From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Greg Lindstrom Sent: Tuesday, August 26, 2008 2:54 PM To: python-list@python.org Subject: Renaming Excel Spreadsheets Hello, I am working with Python to create Excel spreadsheets and have run into a couple of problems I hope you can help me with. First...are there any bindings/libraries into Open Office? Now, back to Excel. -- Does anyone know a way to create N worksheets? By default, 3 are created, but I would like more. -- Is it possible to rename a worksheet inside of the workbook (change Sheet1 to July 08, for example). I've been working with Mark Hammond's book on Windows programming with Python, but these have me stumped. Better yet, an Open Source reporting system (ala Crystal Reports) would keep me from having to write this. I've looked at Jasper and DataVision; Thanks, --greg -- http://mail.python.org/mailman/listinfo/python-list
RE: How to use win32com to convert a MS WORD doc to HTML ?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Lave Sent: Tuesday, August 19, 2008 10:06 AM To: python-list@python.org Subject: How to use win32com to convert a MS WORD doc to HTML ? Hi, all ! I'm a totally newbie huh:) I want to convert MS WORD docs to HTML, I found python windows extension win32com can make this. But I can't find the method, and I can't find any document helpful. Word Object Model: http://msdn.microsoft.com/en-us/library/bb244515.aspx Specifically look at Document's SaveAs method. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Good python equivalent to C goto
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Kurien Mathew Sent: Saturday, August 16, 2008 5:21 PM To: python-list@python.org Subject: Good python equivalent to C goto Hello, Any suggestions on a good python equivalent for the following C code: while (loopCondition) { if (condition1) goto next; if (condition2) goto next; if (condition3) goto next; stmt1; stmt2; next: stmt3; stmt4; } === Use a flag and a one loop for loop while loopCondition: flag = False for i in range(1): if condition1: break if condition2: break if condition3: break stmt1 stmt2 flag = True if not flag: stmt3 stmt4 === Or just a straight flag while ( loopCondition ): flag = False if (condition1) flag = True # goto next; if (not flag and condition2) flag = True # goto next; if (not flag and condition3) flag = True # goto next; if not flag: stmt1 stmt2 else stmt3 stmt4 * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: how many nested for can we utilize?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Lie Sent: Monday, August 18, 2008 11:04 AM To: python-list@python.org Subject: Re: how many nested for can we utilize? On Aug 17, 4:23 pm, Fredrik Lundh [EMAIL PROTECTED] wrote: Patrol Sun wrote: when I use 20 for ,SystemError: too many statically nested blocks When I use 100 for ,IndentationError: too many levels of indentation How to handle these errors? so why exactly are you trying to nest 20 or 100 for-in loops? /F I think most (all?) algorithm that might use 20+ levels of for-in loops could almost always be replaced with a recursive function. Or at least they could be broken into smaller functions. Recursion is slow. There was a thread on permutations and I ran some timings on various methods of nesting loops. Also, I do remember hitting nested for limits very quickly. I think list comprehensions allowed for deeper nesting than straight for loops. Anyway, the thread contains various code and solutions that should help the OP. http://mail.python.org/pipermail/python-list/2008-January/473787.html Cookbook is relatively decent. 5 deep, 100 iterations: list comprehension: 11.02 nested for loop : 13.16 +19% cookbook : 18.85 +71% recursion : 69.00 +526% eval : 13.30 +20% Start of thread: http://mail.python.org/pipermail/python-list/2008-January/473650.html * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: Monitor and compare two log files in real time
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of m Sent: Wednesday, August 06, 2008 1:25 PM To: python-list@python.org Subject: Monitor and compare two log files in real time I have a script I would like to write but I am not sure of where to start / approach. Perhaps someone could help direct me in the right direction. Any advice is appreciated. I would like to write a python script that monitors two log files. If a certain string, lets say string1 shows up in logfile-A, I want to check if that same string shows up in log file-B within 8 minutes. If it does not show up within 8 minutes, send an email ( using sendmail or postfix). Do you have any suggestions? -- Google on python tail to get a python implementation of the unix tail command. The rest should be easy. http://code.activestate.com/recipes/157035/ * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: New to Python, familiar with Perl - Seeking info sources
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Brett Ritter Sent: Thursday, July 24, 2008 9:54 AM To: python-list@python.org Subject: New to Python, familiar with Perl - Seeking info sources After many years happily coding Perl, I'm looking to expand my horizons. [no flames please, I'm pretty aware of Perl's strengths and weaknesses and I'm just here to learn more, not to enter religious debates]. snip Any recommendations? Thanks in advance. I have a Perl background and have found the O'Reilly books to be useful. The Learning Python book (or whatever it's called) is good because it covers the paradigm shifts and potential gotchas that you won't even consider thinking about otherwise. Only downside is wading through the novice 'how to program' parts. The Cookbook is also good for getting 'standard' apps up and running quickly (meaning you know how to do it in Perl, and just need the equivalent Python syntax/paradigm.) The Python help can be very hit or miss. You're going to have _fun_ with the Python regex module. *twitch*winch*sputter* Generally speaking, there's a Python module to do just about everything you could do in Perl. The only gap I've found is in the win32com with a class in a .tlb file (works fine in Perl, fails in Python.) But someone on the python-win32 list posted a potential workaround which I need to test. The really spiffy part is that when I converted a few Perl scripts to Python, the Python scripts were a bit smaller. =O Python does less compile time type checking than Perl. And finally, this mailing list does produce useful, polite answers about syntax to theory, despite some noise. -- http://mail.python.org/mailman/listinfo/python-list
RE: properly delete item during for item in...
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Ratko Sent: Thursday, July 17, 2008 12:27 PM To: python-list@python.org Subject: properly delete item during for item in... Say you have something like this: for item in myList: del item Would this actually delete the item from the list or just decrement the reference counter because the item in myList is not associated with name item anymore (but still is with myList[itemIndex])? In other words, is item a temporary reference to myList[itemIndex] or is it actually that reference that myList has stored? I am not sure if this question even makes any sense anymore. I've been using python for years and never had any problems (and I don't now either) but now that I had to revisit c++/STL, I had to deal about these issues and was wondering how python does it. Walk the list backwards when deleting. master = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] print Deletes nothing a = master[:] print a for i in a: del i print a print print print Deletes safely from end a = master[:] print a for i in range(len(a)-1, -1, -1): print i if i % 2 == 0: print removing , master[i] del a[i] print , a, if master[i] in a: print Ooops, deleted wrong thing..., print print a print print print Delete from front. Deletes wrong things and throws an exception... a = master[:] print a #for i in range(len(a)-1, -1, -1): for i in range(len(a)): print i if i % 2 == 0: print removing , master[i] del a[i] print , a, if master[i] in a: print Ooops, deleted wrong thing..., print print a -- http://mail.python.org/mailman/listinfo/python-list
RE: 'if name is not None:' v. 'if name:'
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Victor Noagbodji Sent: Tuesday, July 15, 2008 3:44 PM To: python-list@python.org Subject: Re: 'if name is not None:' v. 'if name:' what's the difference between these two statement? one checks if the given object is not None, the other checks if it's a true value: http://docs.python.org/ref/Booleans.html#Booleans And which one should one use? depends on what you want to test for, of course. /F Well that's exactly why I'm asking. Since None returns False in if statements. Why do people use if name is not None: instead of simply writing if not name? If name is None: Then name is NULL, nothing, nada, no object, no memory allocated, a NULL pointer If name is not None: Then name is an object. It's a pointer to some kind of allocated structure in memory. No idea if it contains a false or true value. If name: Then either a) name is an object, and that object does not have a 'false' value, such as False, zero, or empty. or b) name is NULL/None. No object. Try this: d = dict() if not d: d['a'] = 1 print d d = None if not d: d['c'] = 3 print d * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: 'if name is not None:' v. 'if name:'
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Reedick, Andrew Sent: Tuesday, July 15, 2008 4:13 PM To: Victor Noagbodji; python-list@python.org Subject: RE: 'if name is not None:' v. 'if name:' If name: Then either a) name is an object, and that object does not have a 'false' value, such as False, zero, or empty. or b) name is NULL/None. No object. Change that to: If not name: Then either a) name is an object, and that object does not have a 'false' value, such as False, zero, or empty. or b) name is NULL/None. No object. -- http://mail.python.org/mailman/listinfo/python-list
RE: How make regex that means contains regex#1 but NOT regex#2 ??
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Tuesday, July 01, 2008 2:29 AM To: python-list@python.org Subject: How make regex that means contains regex#1 but NOT regex#2 ?? I'm looking over the docs for the re module and can't find how to NOT an entire regex. For example. How make regex that means contains regex#1 but NOT regex#2 ? Match 'foo.*bar', except when 'not' appears between foo and bar. import re s = 'fooAAABBBbar' print Should match:, s m = re.match(r'(foo(.(?!not))*bar)', s); if m: print m.groups() print s = 'fooAAAnotBBBbar' print Should not match:, s m = re.match(r'(foo(.(?!not))*bar)', s); if m: print m.groups() == Output == Should match: fooAAABBBbar ('fooAAABBBbar', 'B') Should not match: fooAAAnotBBBbar * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: How make regex that means contains regex#1 but NOT regex#2 ??
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Reedick, Andrew Sent: Tuesday, July 01, 2008 10:07 AM To: [EMAIL PROTECTED]; python-list@python.org Subject: RE: How make regex that means contains regex#1 but NOT regex#2 ?? Match 'foo.*bar', except when 'not' appears between foo and bar. import re s = 'fooAAABBBbar' print Should match:, s m = re.match(r'(foo(.(?!not))*bar)', s); if m: print m.groups() print s = 'fooAAAnotBBBbar' print Should not match:, s m = re.match(r'(foo(.(?!not))*bar)', s); if m: print m.groups() == Output == Should match: fooAAABBBbar ('fooAAABBBbar', 'B') Should not match: fooAAAnotBBBbar Fixed a bug with 'foonotbar'. Conceptually it breaks down into: First_half_of_Regex#1(not Regex#2)(any_char_Not_followed_by_Regex#2)*Second_half_of_Regex#1 However, if possible, I would make it a two pass regex. Match on Regex#1, throw away any matches that then match on Regex#2. A two pass is faster and easier to code and understand. Easy to understand == less chance of a bug. If you're worried about performance, then a) a complicated regex may or may not be faster than two simple regexes, and b) if you're passing that much data through a regex, you're probably I/O bound anyway. import re ss = ('foobar', 'fooAAABBBbar', 'fooAAAnotBBBbar', 'fooAAAnotbar', 'foonotBBBbar', 'foonotbar') for s in ss: print s, m = re.match(r'(foo(?!not)(?:.(?!not))*bar)', s); if m: print m.groups() else: print == output == foobar ('foobar',) fooAAABBBbar ('fooAAABBBbar',) fooAAAnotBBBbar fooAAAnotbar foonotBBBbar foonotbar * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Freeze problem with Regular Expression
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Kirk Sent: Wednesday, June 25, 2008 11:20 AM To: python-list@python.org Subject: Freeze problem with Regular Expression Hi All, the following regular expression matching seems to enter in a infinite loop: import re text = ' MSX INTERNATIONAL HOLDINGS ITALIA srl (di seguito MSX ITALIA) una ' re.findall('[^A-Z|0-9]*((?:[0-9]*[A-Z]+[0-9|a-z|\-]*)+\s*[a- z]*\s*(?:[0-9] *[A-Z]+[0-9|a-z|\-]*\s*)*)([^A-Z]*)$', text) # No problem with perl with the same expression: # $s = ' MSX INTERNATIONAL HOLDINGS ITALIA srl (di seguito MSX ITALIA) una '; $s =~ /[^A-Z|0-9]*((?:[0-9]*[A-Z]+[0-9|a-z|\-]*)+\s*[a-z]*\s*(?:[0- 9]*[A- Z]+[0-9|a-z|\-]*\s*)*)([^A-Z]*)$/; print $1; # I've python 2.5.2 on Ubuntu 8.04. any idea? Thanks! It locks up on 2.5.2 on windows also. Probably too much recursion going on. What's with the |'s in [0-9|a-z|\-]? The '|' is a character not an 'or' operator. I think you meant to say either '[0-9a-z\-]' or '[0-9a-z\-|]' * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Iterate creating variables?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Diez B. Roggisch Sent: Friday, June 13, 2008 11:21 AM To: python-list@python.org Subject: Re: Iterate creating variables? [EMAIL PROTECTED] schrieb: I have twenty-five checkboxes I need to create (don't ask): self.checkbox1 = ... self.checkbox2 = ... . . . self.checkbox25 = ... Right now, my code has 25 lines in it, one for each checkbox, since these are all variables. Is there a way to write a loop so that I can have fewer lines of code but still keep the variables? Keep either a list or dictionary around. Like this: checkboxes = [] for o in xrange(25): checkboxes.append(create a checkbox...) self.checkboxes = checkboxes And if you're too lazy to go back and convert the 25 checkboxes to an array/list/dictionary, this will create a list from the existing variable names: s1 = 'one' s2 = 'two' s3 = 'three' s4 = 'four' s_list = [] s_list.append(None) # since there is no s0, let's use 1 based list for i in range(1, 5): code = s%d % i s_list.append(eval(code)) print s_list * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Iterate creating variables?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Friday, June 13, 2008 11:11 AM To: python-list@python.org Subject: Iterate creating variables? I have twenty-five checkboxes I need to create (don't ask): self.checkbox1 = ... self.checkbox2 = ... . . . self.checkbox25 = ... Right now, my code has 25 lines in it, one for each checkbox, since these are all variables. Is there a way to write a loop so that I can have fewer lines of code but still keep the variables? I've tried: for o in xrange(25): self.checkbox[o] = ... which didn't work, and for o in xrange(25): self.checkbox[''%d'%(o)] = ... which also didn't work. Both give the error message: Attribute error: Main.App has no attribute checkbox, which clearly indicates that I'm not keeping the variability aspect I want. Is there a way? I appreciate any and all answers! Either store the checkboxes in an array or hash/dictionary. If that's not practical, then You can use strings to build the code and use eval to execute the string as code. Ex: for i in range(10): code = %d + %d % (i, i) print eval(code) -- http://mail.python.org/mailman/listinfo/python-list
RE: regex help
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Support Desk Sent: Tuesday, June 03, 2008 9:32 AM To: python-list@python.org Subject: regex help I am trying to put together a regular expression that will rename users address books on our server due to a recent change we made. Users with address books user.abook need to be changed to [EMAIL PROTECTED] I'm having trouble with the regex. Any help would be appreciated. import re emails = ('foo.abook', 'abook.foo', 'bob.abook.com', 'john.doe.abook') for email in emails: print email, '--', print re.sub(r'\.abook$', '@domain.com.abook', email) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: New variable?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of tmallen Sent: Tuesday, June 03, 2008 2:41 PM To: python-list@python.org Subject: New variable? What's the proper way to instantiate a new variable? x = ? I've always used X = None in those cases where I need to pre-declare a variable to set scope. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: webspider, regexp not working, why?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Friday, May 23, 2008 12:43 PM To: python-list@python.org Subject: webspider, regexp not working, why? url = re.compile(r^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z] search and match yields the same results. but when you put something like href= in front of it it doesnt work. a) '^' matches at the beginning of a line. So if 'href=' is at the beginning of the line... b) Regexes are hard enough to read as is. (http|ftp|https) is more readable than ((ht|f)tp(s?). c) If you're going to parse html/xml then bite the bullet and learn one of the libraries specifically designed to parse html/xml. Many other regex gurus have learned this lesson. Myself included. =) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: exists=false, but no complaint when i open it!?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Reedick, Andrew Sent: Thursday, May 15, 2008 12:11 PM To: globalrev; python-list@python.org Subject: RE: exists=false, but no complaint when i open it!? print os.path.exists('C:\Users\saftarn\Desktop\NetFlixDataSet \trainingsetunzipped\training_set\mv_001.txt') You're falling victim to string interpolation because of the backslashes. (\n == newline, \N == N). Try using a raw string r'filename', instead of 'filename': print os.path.exists(r'C:\Users\saftarn\Desktop\NetFlixDataSet\trainingsetunz i pped\training_set\mv_001.txt') Specificially, the \t in '\trainingsetunzipped' and in '\training_set' were being treated as tab characters. Ignore my comment about '\N == N'. -- http://mail.python.org/mailman/listinfo/python-list
RE: exists=false, but no complaint when i open it!?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of globalrev Sent: Thursday, May 15, 2008 12:04 PM To: python-list@python.org Subject: exists=false, but no complaint when i open it!? print os.path.exists('C:\Users\saftarn\Desktop\NetFlixDataSet \trainingsetunzipped\training_set\mv_001.txt') d=open('C:/Python25/myPrograms/mapexperiments/maps/provinces-of- sweden.gif') d.close() exists returns false but when i open it doesnt complain. how come? another file that exists returned false for complained when i tried to open it. -- You're falling victim to string interpolation because of the backslashes. (\n == newline, \N == N). Try using a raw string r'filename', instead of 'filename': print os.path.exists(r'C:\Users\saftarn\Desktop\NetFlixDataSet\trainingsetunzi pped\training_set\mv_001.txt') * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: How to modify meaning of builtin function not to !?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of grbgooglefan Sent: Friday, May 09, 2008 9:41 AM To: python-list@python.org Subject: How to modify meaning of builtin function not to !? I am creating functions, the return result of which I am using to make decisions in combined expressions. In some expressions, I would like to inverse the return result of function. E.g. function contains(source,search) will return true if search string is found in source string. I want to make reverse of this by putting it as: if ( ! contains(s1,s2) ): return 1 I found that ! is not accepted by Python compile fails with invalid syntax. Corresponding to this Boolean Operator we've not in Python. How can I make not as !? Serious question: Why would you want to? 'not' is easier to read (and type) than '!'. Mentally, when you see '!' you think 'not'. It's also harder to overlook 'not', especially when compared to '!contains()'. Finally, I imagine that Spanish speaking coders suffer enormous mental anguish when they see a right-side up '!' at the beginning of a sentence. if ( ! contains(s1,s2) ): return 1 if ( !contains(s1,s2) ): return 1 if ( not contains(s1,s2) ): return 1 if ( ¡contains(s1,s2)): return 1 * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: Python Success stories
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of azrael Sent: Tuesday, April 22, 2008 6:26 AM To: python-list@python.org Subject: Python Success stories Hy guys, A friend of mine i a proud PERL developer which always keeps making jokes on python's cost. Please give me any arguments to cut him down about his commnets like :keep programing i python. maybe, one day, you will be able to program in VisualBasic This hurts. Please give me informations about realy famous aplications. IIRC, Python is used in games like Eve Online (SciFi MMO) and Vampire: Bloodlines (RPG.) Years later, a dedicated fan is still fixing/updating the Bloodlines python scripts that control the dialogue and scripted events. OTOH, I use Perl over Python when it comes to Windows COM scripts due to finding a typelib that Python just refused to load. *shrug* Perl, Python, and your friend are tools. Use them appropriately for the given situation. -- http://mail.python.org/mailman/listinfo/python-list
RE: vary number of loops
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Tim Chase Sent: Wednesday, April 16, 2008 9:53 AM To: [EMAIL PROTECTED] Cc: python-list@python.org Subject: Re: vary number of loops If n=3, I want to have 3 sets of elements and mix them up using 3 for loops. You might be ineterested in this thread: http://mail.python.org/pipermail/python-list/2008-January/473650.html where various solutions were proposed and their various merits evaluated. I second that. The thread compared building loops on the fly, building comprehensions nested to arbitrarily levels, recursion (slw!), a slick cookbook recipe using iterators, etc. and provided timings for each method. Definitely worth bookmarking. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: Stripping scripts from HTML with regular expressions
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Michel Bouwmans Sent: Wednesday, April 09, 2008 5:44 PM To: python-list@python.org Subject: RE: Stripping scripts from HTML with regular expressions Thanks! That did the trick. :) I was trying to use HTMLParser but that choked on the script-blocks that didn't contain comment-indicators. Guess I can now move on with this script, thank you. S you asked for help with a regex workaround, but didn't ask for help with the original problem, namely HTMLParser? ;-) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: Stripping scripts from HTML with regular expressions
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Michel Bouwmans Sent: Wednesday, April 09, 2008 3:38 PM To: python-list@python.org Subject: Stripping scripts from HTML with regular expressions Hey everyone, I'm trying to strip all script-blocks from a HTML-file using regex. I tried the following in Python: testfile = open('testfile') testhtml = testfile.read() regex = re.compile('script\b[^]*(.*?)/script', re.DOTALL) Aha! \b is being interpolated as a backspace character: \b ASCII Backspace (BS) Always use a raw string with regexes: regex = re.compile(r'script\b[^]*(.*?)/script', re.DOTALL) Your regex should now work. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: Stripping scripts from HTML with regular expressions
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Michel Bouwmans Sent: Wednesday, April 09, 2008 3:38 PM To: python-list@python.org Subject: Stripping scripts from HTML with regular expressions Hey everyone, I'm trying to strip all script-blocks from a HTML-file using regex. I tried the following in Python: testfile = open('testfile') testhtml = testfile.read() regex = re.compile('script\b[^]*(.*?)/script', re.DOTALL) result = regex.sub('', blaat) print result This strips far more away then just the script-blocks. Am I missing something from the regex-implementation from Python or am I doing something else wrong? [Insert obligatory comment about using a html specific parser (HTMLParser) instead of regexes.] Actually your regex didn't appear to strip anything. You probably saw stuff disappear because blaat != testhtml: testhtml = testfile.read() result = regex.sub('', blaat) Try this: import re testfile = open('a.html') testhtml = testfile.read() regex = re.compile('script\s+.*?(.*?)/script', re.DOTALL) result = regex.sub('',testhtml) print result -- http://mail.python.org/mailman/listinfo/python-list
RE: basic python question about for loop
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of jmDesktop Sent: Wednesday, April 09, 2008 4:51 PM To: python-list@python.org Subject: basic python question about for loop From the Python.org tutorial: for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print n, 'equals', x, '*', n/x ... break ... else: ... # loop fell through without finding a factor ... print n, 'is a prime number' ... 2 is a prime number 3 is a prime number 4 equals 2 * 2 5 is a prime number 6 equals 2 * 3 7 is a prime number 8 equals 2 * 4 9 equals 3 * 3 first time 2 mod 2, 2/2, no remainder == 0, what am I doing wrong? Why did it fall through? a) 2 is prime, so nothing is wrong. b) Range isn't doing what you think it's doing: print range(2,2) [] print range(2,3) [2] print range(2,4) [2, 3] print range(2,5) [2, 3, 4] print range(1,1) [] print range(1,2) [1] print range(1,3) [1, 2] * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: basic python question about for loop
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of jmDesktop Sent: Wednesday, April 09, 2008 5:04 PM To: python-list@python.org Subject: Re: basic python question about for loop for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print n, 'equals', x, '*', n/x ... break ... else: ... # loop fell through without finding a factor ... print n, 'is a prime number' ... first time 2 mod 2, 2/2, no remainder == 0, what am I doing wrong? Why did it fall through? So what is n and x in the first iteration? Sorry. I'm trying. You're never getting to n and x in the first iteration, because the 'for x in range(2, n)' loop isn't looping. This: for x in range(2, n) is equivalent in C/Perl/etc. to: for(x=2; xn; x++) which for the first iteration is: for(x=2; x2; x++) Since (2 2) is false, you never call 'if n %x == 0:' in the first iteration. Or to put it another way: Range(2, n) starts at 2, and stops _before_ n. Range(2, n) starts at 2, and stops _before_ 2. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: How can I use quotes without escaping them using CSV?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of jeffself Sent: Wednesday, April 09, 2008 5:11 PM To: python-list@python.org Subject: How can I use quotes without escaping them using CSV? If I put an escape character in, it works. For example, if I use ~ as my escape character, my output looks like this: 0001[tab]Michael L. ~Mick~ Jones[tab]189 I don't want that. If I don't include an escape character, it doesn't work. Here's my code: import sys import csv from readexcel import * f = open(results.txt, 'wb') book = sys.argv[1] sheet = sys.argv[2] xl = readexcel(book) sheetnames = xl.worksheets() for s in sheetnames: if s == sheet: writer = csv.writer(f, delimiter='\t', quoting=csv.QUOTE_NONE) for row in xl.getiter(s): writer.writerow((row['Precinct'],row['Candidate'],unicode(int(row['Vote s'] f.close() The documentation is pretty, uhm, obtuse, but you also need to set quotechar. import sys import csv names = ['Michael L. Mick Jones', 'Vickie A. Meyers', 'John Jack Smith'] writer = csv.writer(sys.stdout, delimiter='\t', quotechar='', quoting=csv.QUOTE_NONE) for i in names: writer.writerow(['a', i, 'b']) output: a Michael L. Mick Jones b a Vickie A. Meyersb a John Jack Smith b * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Is this a good time to start learning python?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Ant Sent: Monday, March 31, 2008 5:58 PM To: python-list@python.org Subject: Re: Is this a good time to start learning python? On Mar 31, 5:40 pm, Rui Maciel [EMAIL PROTECTED] wrote: BTW. I have to disagree with Andrew's comment: With Perl, once you get the core syntax down, you don't need to master Perl. Instead you just look up the module/feature you want to use and just use it.. This may be true for knocking up Perl scripts, but for reading *other peoples* code in any language you need to have a good mastery of the core language. In Perl this is a quagmire of strange syntax, special cases, multiple ways to do the same thing and esoterica/magic, whereas Python's design to make whitespace significant and its One (obvious) way to do things philosophy makes reading other peoples code much easier. (Of course other peoples code always sucks, but hey ;-) Eh... reading other people's Python code can be pretty hit or miss too. Between undeclared variables (did you mean to reuse that variable name?) and dynamic typing, Python can be really tough to follow. Add in side effects, over-use of lambdas, and the really hit or miss quality of Python's documentation, and Python can be just as difficult to follow as Perl. The things that make code readable are good comments, good design (Python emphasizes OO which helps,) and well-structured code (i.e. don't combine 3-4 operations in a single line.) This holds true for any language, so I wouldn't go out of my to ding Perl. IME. its One (obvious) way to do things philosophy Given some of the solutions people have proposed to code questions in the past, I'm going to pretend you didn't say that. ;-) -- http://mail.python.org/mailman/listinfo/python-list
RE: Is this a good time to start learning python?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Rui Maciel Sent: Monday, March 31, 2008 12:41 PM To: python-list@python.org Subject: Is this a good time to start learning python? Recently I woke up inclined to take up the task of learning another programming language. I've already dipped my toes in Perl (I've read online tutorials and wrote a couple of irrelevant pet projects) but, as the computers at my workplace only sport the python interpreter, it probably means that learning python will end up serving me better, at least in the short run. Plus, you know how Perl goes. So far the decision seems to be a no brainer. Yet, Python 3000 will arrive in a few months. As it isn't backwards compatible with today's Python, there is the risk that no matter what I learn until then, I will end up having to re-learn at least a considerable part of the language. To put it in other words, I fear that I will be wasting my time. At least that is what a clueless newbie believes. As this group is frequented by people who have more insight into all things pythonesque, what are your thoughts on this? Meh. That's like asking if you should learn to use a fork or a spoon. If you're learning how to program, go with Python. (Learning as in algorithms and data structures.) If you need to use OO, go with Python. Perl's OO syntax is just horrific. If you're using a lot of regexes, need a bit of speed, or need something a bit more robust than dynamically typed objects randomly breaking your code, then go with Perl. ;-) Libraries can also affect your choice. (I had to switch to Perl when Python's win32com failed.) Perl's learning curve is unreadable syntax, whereas Python's curve requires knowing about side effects and dealing with strong, dynamic typing. Overall, Python is more high level and cleaner looking/readable. However, Python's dynamically typed objects require additional effort/expense to debug, and it's regex module is pretty quirky/painful to use. Perl has a very large library, is fast, is mostly statically compiled, and doesn't get in the way (automatic type conversions, several ways to do something, etc..) Python is probably faster to learn (clearer syntax and OO,) but slower to master (side effects, strongly but dynamically typed.) With Perl, once you get the core syntax down, you don't need to master Perl. Instead you just look up the module/feature you want to use and just use it. Finally, I find that Perl's documentation is much better than Python's. All IMO, IME. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: Element Tree Help
Robert Rawlins wrote: I have little to no experiance with element tree and I'm struggling to find a way to parse the details from the XML document (attached) into my application. Essentialy I'm looking to take the following document and turn it into a dict of tuples, each dict element defines a datasource with the key to the element being the 'name' which is defined in the XML and then the value of the pair is a tuple which contains the details of the datasource, like the host and port etc. Here's another way to walk an ElementTree. This one creates a hash of hashes which are normally more useful than tuples for property lookups. import xml.etree.ElementTree as ET tree = ET.ElementTree(file = foo.xml) d = {} for ds in tree.findall(datasource): name = ds.find('name').text d[name] = {} print 'datasource =', name for i in ds.findall('*'): #for i in ds.getiterator(): # also works if i.tag in ('datasource', 'name'): continue print '',i.tag, =, i.text d[name][i.tag] = i.text print print d * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: What Programming Languages Should You Learn Next?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Donn Cave Sent: Thursday, March 20, 2008 3:39 PM To: python-list@python.org Subject: Re: What Programming Languages Should You Learn Next? Worth repeating. One of the perhaps surprising consequences, Haskell code can be very easy to modify. I've been fooling around with computer programs for a couple decades, and I'm just getting used to the idea that I can casually rewrite Haskell code and get the compiler to find what I missed. I have come to feel that the indiscipline of dynamic typing in languages like Python leads to an intuitively surprising rigidity. Ten years ago I would cheerfully accept this, given the meager and clumsy support for static typing in languages like C++, but today, it makes me appreciate Haskell's potential for complex projects. Haskell does look interesting (especially in light of that one summer job way back when doing a _lot_ of Lotus-123 spreadsheet programming.) There's a Haskell wiki: http://www.haskell.org/ Quicksort in Haskell versus C is amazing: http://www.haskell.org/haskellwiki/Introduction#What.27s_good_about_func tional_programming.3F Quicksort in Python inspired by Haskell's quicksort: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66473 * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: Haskell vs ??
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Michael Wieher Sent: Thursday, March 20, 2008 4:36 PM To: python-list@python.org Subject: Haskell vs ?? Just to help clear up my own understanding of this discussion, this is basically a language that obfuscates details and makes low-level decisions in a average-best way, and thus allows for lazy people to write kind of decent code quickly? Change obfuscates details to focuses on the right level of detail. C's details are too low. Python ignores details to the point that you don't find dumb type-casting mistakes until the code is actually being executed. makes low-level decisions in a average-best way, Yes, just like how CPython is considered slow because of it's silly garbage collecting, too dynamically typed to be optimized, paradigm. allows for lazy people to write kind of decent code quickly? No, it's not at all like a usenet group or mailing list where people are too lazy to post kind of thought out comments. ;-) The whole point of coding is to implement a requirement. A requirement is tied back to a business case, and a business case is an idea on how to get people to give you money in return for your service or product. Any code that doesn't directly implement the business case is 'overhead' (such as memory management, having to execute every single line of your Python code in order to catch type mismatches instead of having a compiler find such things early in development, having to write verbose|obfuscated syntax that requires more debugging since it's so verbose|obfuscated, responding to trolls, etc.) In theory, it follows the less is more strategy but without crossing the line into anarchy or the Wild West (i.e., no type checking,) while not being so syntactically brief as to look like hieroglyphics. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: Joseph Weizenbaum
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Aahz Sent: Friday, March 14, 2008 2:05 PM To: python-list@python.org Subject: RIP: Joseph Weizenbaum Creator of Eliza: http://www-tech.mit.edu/V128/N12/weizenbaum.html -- How do you feel about creator of Eliza? * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: List Combinations
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Shane Geiger Sent: Wednesday, March 12, 2008 10:33 AM To: Michael Wieher Cc: python-list@python.org Subject: Re: List Combinations def gen(lists): out = '[' + ','.join([v%s % i for i in range(len(lists))]) + ']' comp = ''.join([ for v%d in lists[%d] % (i, i) for i in range(len(lists))]) return eval('[ ' + out + comp + ' ]') a,b,c = [1,2,3],[4,5,6],[7,8,9] print gen([a, b, c]) -- Shane Geiger IT Director National Council on Economic Education [EMAIL PROTECTED] | 402-438-8958 | http://www.ncee.net It helps to quote your source... http://www.mail-archive.com/python-list@python.org/msg178457.html Start here http://www.mail-archive.com/python-list@python.org/msg178356.html and go through the thread. There are several ways to solve the problem and we evaluated the performance and 'pythonicity' of each. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: Last 4 Letters of String
-Original Message- From: Tim Chase [mailto:[EMAIL PROTECTED] Sent: Monday, February 25, 2008 8:34 AM To: Reedick, Andrew Cc: Robert Rawlins - Think Blue; python-list@python.org Subject: Re: Last 4 Letters of String How would you get the last 4 items of a list? Did you try the same get the last 4 items solution that worked for a string? lst[-4:] The idea was to ask a question that would help the original poster to answer their own question. =) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Article of interest: Python pros/cons for the enterprise
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Tim Chase Sent: Wednesday, February 20, 2008 8:58 AM To: estherschindler Cc: python-list@python.org Subject: Re: Article of interest: Python pros/cons for the enterprise Oh noes! You might need competent programmers that actually understand what they're doing! (they might even have to write testing code to make sure their code works as intended...it's a good thing that Python includes unittest and doctest modules in the stock install) Sigh. Any programmer that can overcome the hurdles of learning Java or C# can quickly/easily pick up Python as long as they're willing to unlearn some bad habits. -Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Carl Banks Sent: Wednesday, February 20, 2008 8:39 PM To: python-list@python.org Subject: Re: Article of interest: Python pros/cons for the enterprise C++ is a compile-time, type-checked language, which means it is totally safer for newbies than Python. Yep, your big company is totally safe with newbie C++ programmers. Eh, don't laugh too hard. Since Python code isn't type-checked until the actual code block is executed, you have to go through the extra step of testing/running _every_ line of code before you'll find an error. Then there's the problem of how mutable Python objects are. So even if you execute every line of code, you might not have executed the code with every possible type of object combination. Compared to a statically typed language, it can get very expensive to write comprehensive test cases for python scripts. So I wouldn't be quick to dismiss the notion that Java/C#/C++ are more newbie-safe than Python. =/ An amusing case in point was where I had a type-cast error in an exception's catch block's print statement. This simple error caused the program to stop with an unhandled exception. Something that basic would have been caught in a statically typed language very early in the dev cycle when it's cheaper to fix the problem. And the idea of running/testing exceptions or simple print statements isn't always foremost in people's minds. =P * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: Last 4 Letters of String
How would you get the last 4 items of a list? From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Robert Rawlins - Think Blue Sent: Thursday, February 21, 2008 11:36 AM To: python-list@python.org Subject: Last 4 Letters of String Hello Guys, I'm looking for a function which will give me the last 4 characters of a given string. I'm sure it's a very simple task but I couldn't find anything of it. Any ideas? Rob -- http://mail.python.org/mailman/listinfo/python-list
RE: Looking for a Python Program/Tool That Will Add Line Numbers to atxt File
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of William Pursell Sent: Monday, February 18, 2008 8:37 AM To: python-list@python.org Subject: Re: Looking for a Python Program/Tool That Will Add Line Numbers to atxt File On Feb 14, 6:54 am, W. Watson [EMAIL PROTECTED] wrote: See Subject. It's a simple txt file, each line is a Python stmt, but I need up to four digits added to each line with a space between the number field and the text. Perhaps someone has already done this or there's a source on the web for it. I'm not yet into files with Python. A sudden need has burst upon me. I'm using Win XP. Not sure if Python program/tool means a tool or a program in Python, but if awk is okay, that's the tool I would use: awk '{printf( %4d %s\n, NR % 1, $0 )}' On a related note, since it's probably easier to install Perl instead of awk on a windows box: type foo.java | perl -ne $counter++; print sprintf(qq(%4d ), $counter), $_; -- http://mail.python.org/mailman/listinfo/python-list
RE: Solve a Debate
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of nexes Sent: Friday, February 15, 2008 11:25 AM To: python-list@python.org Subject: Solve a Debate Alright so me and my friend are having argument. Ok the problem we had been asked a while back, to do a programming He declared an array and assigned the number of days in a month to its own element in an array. Now I realise that in this example it would not make a difference in terms of efficiency, but it is my belief that if there is more data that needed to be assigned(i.e. a couple megs of data) it would be simpler (and more efficient) to do a compare rather then assigning all that data to an array, since you are only going to be using 1 value and the rest of the data in the array is useless. What are everyone else's thoughts on this? Efficient how? Looking up the data in a array would probably be faster (look-up tables normally are.) You could make the array efficient by using pointers, gaining both space and time efficiency. Mon[1] and mon[3] ... would point to 31. The array can also just be collection of pointers to the multi-megabyte objects on disk. Most languages have modules letting you maintain an index in memory that points to data on disk. If the array is static or otherwise only loaded once into memory at startup, and you have plenty of memory and patience, then who cares if it is inefficient? Simple solutions are normally faster to implement. It's not often that you need to spend three days to save three seconds. Then there's debug and change efficiency. An array lookup is simple to understand and thus less prone to bugs. It can also be easier to change a single array element than to change a complicated formula or a cluster of nested if-then-else statements. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: Word document accessing using python
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Hari Sent: Wednesday, February 13, 2008 8:40 AM To: python-list@python.org Subject: Word document accessing using python Hello, I want to fetch some data from the work document and to fill it inside excel sheet. For this I want to perform opening word documents and do some string manipulations for extracting data and to fill it inside excel sheet. Can any one help in this by saying how to do this or by giving some link where I can find some hints. Google for sample scripts. Check the python documentation about Quick-Starts to Python and COM' and makepy.py. Word Object Model Reference: http://msdn2.microsoft.com/en-us/library/bb244515.aspx import win32com.client word = win32com.client.Dispatch(Word.Application) word.Visible = True word.Documents.Open('c:\\some\\where\\foo.doc') doc = word.Documents(1) tables = doc.Tables for table in tables: for row in table.Rows: for cell in row.Cells: ... Excel reference: http://msdn2.microsoft.com/en-us/library/bb149081.aspx import win32com.client import os excel = win32com.client.Dispatch(Excel.Application, Quit) excel.Visible = 1 dir = os.getcwd() book = excel.Workbooks.Open(dir + /test.xls) sheet = book.Worksheets(1) for i in sheet.Range(A8:B9): print i print(active chart = + str(excel.ActiveChart)) print(active sheet= + str(excel.ActiveSheet)) print(\t + str(excel.ActiveSheet.Name)) print(active workbook = + str(excel.ActiveWorkbook)) print(\t + str(excel.ActiveWorkbook.Name)) new_sheet = excel.Sheets.Add(None, None, None, win32com.client.constants.xlWorksheet) new_sheet.Name = foo ## import from a csv file query_results = new_sheet.QueryTables.Add(TEXT; + dir + \\data.csv, new_sheet.Cells(1,1)) query_results.TextFileParseType = win32com.client.constants.xlDelimited; query_results.TextFileCommaDelimiter = 1; query_results.Refresh(); * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: Regular Expression for Prime Numbers (or How I came to fail at them, and love the bomb)
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Wednesday, February 13, 2008 1:41 PM To: python-list@python.org Subject: Re: Regular Expression for Prime Numbers (or How I came to fail at them, and love the bomb) On Feb 13, 9:48 am, Carsten Haese [EMAIL PROTECTED] wrote: On Wed, 2008-02-13 at 07:31 -0800, [EMAIL PROTECTED] wrote: return re.match(^1?$|^(11+?)\1+$, convert) That needs to be either return re.match(r^1?$|^(11+?)\1+$, convert) or return re.match(^1?$|^(11+?)\\1+$, convert) in order to prevent \1 from being read as \x01. But why doesn't it work when you make that change? It does work. Read the referenced website. If there is a match then the number isn't prime else # no match the number is prime. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: Word document accessing using python
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Juan_Pablo Sent: Wednesday, February 13, 2008 1:07 PM To: python-list@python.org Subject: Re: Word document accessing using python import win32com.client but, window32com.client is only functional in windows Correct. Microsoft tries very hard to make sure that its applications and their saved data are only readable/usable/automate-able using MS-Office and MS-Windows (and preferably the current versions of each.) If you can't create a quality product that people will willingly pay money for, then use lock-in to squeeze money out of them. =/ As suggested by castironpi, you could save the word docs in a neutral format such as text or xml. Another idea is to find a module or commercial product that will read word files. In theory, from what I've heard, Open Office can read some (most?) word formats, and since OO has a scriptable api (does it?), you could use OO to read the word doc and use OO's api to get the relevant data. You would need to test it out. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: CSV Reader
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Mike P Sent: Tuesday, February 12, 2008 5:37 AM To: python-list@python.org Subject: Re: CSV Reader just saw i needed to change record.startswith to row.startswith but i get hte following traceback error Traceback (most recent call last): File C:\Python25\Lib\site-packages\pythonwin\pywin\framework \scriptutils.py, line 310, in RunScript exec codeObject in __main__.__dict__ File Y:\technical\Research\E2C\Template_CSV\import CSV test.py, line 10, in module if not start_line and row.startswith('Transaction ID'): AttributeError: 'list' object has no attribute 'startswith' -- http://mail.python.org/mailman/listinfo/python-list Algorithms + Data Structures = Programs You need to understand what kind of data structure a list is. You're foundering a bit because you don't have a good understanding of your tools (the list data structure in this case.) Try going through the O'Reilly Learning Python book. Even better would be to take/audit a college/university class on data structures and algorithms. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: CSV Reader
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Mike P Sent: Monday, February 11, 2008 11:42 AM To: python-list@python.org Subject: Re: CSV Reader Cheers for the help, the second way looked to be the best in the end, and thanks for the boolean idea Mike working_CSV = //filer/common/technical/Research/E2C/Template_CSV/ DFAExposureToConversionQueryTool.csv save_file = open(//filer/common/technical/Research/E2C/Template_CSV/ CSV_Data2.csv,w) CSV_Data = open(working_CSV) data = CSV_Data.readlines() flag=False for record in data: if record.startswith('Transaction ID'): flag=True if flag: save_file.write(record) save_file.close() Don't be a pansy. Use the csv module, or add a check for record.startswith('TransactionID'). There's no guarantee that csv columns will be double-quoted. (Leading whitespace may or may not be acceptable, too.) Look at the first piece of sample code in the documentation for the csv module. (Section 9.1.5 in python 2.5) You're 99% of the way to using csv.reader() properly. Nitpick: If the boolean check is expensive, then if not flag and record.startswith(...): flag = true Nitpick: flag is a weak name. Use something like bPrint, okay2print, or print_now or anything that's more descriptive. In larger and/or more complex programs, meaningful variable names are a must. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: CSV Reader
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Mike P Sent: Monday, February 11, 2008 11:10 AM To: python-list@python.org Subject: Re: CSV Reader Hi Larry, i'm still getting to grips with python, but rest assured i thinkn it's better for me to write hte code for learnign purposes My basic file is here, it comes up with a syntax error on the startswith line, is this because it is potentially a list? My idea was to get the lines number where i can see Transaction ID and then write out everything from this point into a new datafile. From the docs for reader: All data read are returned as strings. No automatic data type conversion is performed. Just use print or repr() to see what the row data looks. Then the method to check for 'transaction id' should be abundantly clear. for data in reader: print data print repr(data) Would a better solution be just to use readlines and search for the string with a counter and then write out a file from there? Yes you could, but the danger is that you get an insanely large file that blows out your memory or causes the process to swap to disk space (disk is slow.) Just loop through the lines and use a boolean flag to determine when to start printing. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: keyword 'in' not returning a bool?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of c james Sent: Friday, February 08, 2008 12:10 PM To: python-list@python.org Subject: keyword 'in' not returning a bool? Try this sample = {'t':True, 'f':False} 't' in sample True type('t' in sample) type 'bool' 't' in sample == True False Why is this? Now try bool('t' in sample) == True True Can someone explain what is going on? ('t' in sample) == True True It's operator precedence. 'in' has lower precedence than '=='. Therefore 't' in sample == True evaluates as 't' in (sample == True) The real question is why does 't' in (sample == True) cause an error: TypeError: argument of type 'bool' is not iterable while 't' in sample == True does not? -- http://mail.python.org/mailman/listinfo/python-list
RE: Why not a Python compiler?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Grant Edwards Sent: Friday, February 08, 2008 12:46 PM To: python-list@python.org Subject: Re: Why not a Python compiler? On 2008-02-08, Arnaud Delobelle [EMAIL PROTECTED] wrote: the compiler could do little else except translate it to something like: (python:add a b) [snip more interesting considerations about compiling python] Please get back on topic. This discussion is about parsecs and wookies now. What's a wookie a unit of? How many ewoks are there to a wookie? (Yes, I know the metric system is archaic, but I really don't care for them new fangled 'standard units'.) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Why not a Python compiler?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Torsten Bronger Sent: Thursday, February 07, 2008 3:32 PM To: python-list@python.org Subject: Re: Why not a Python compiler? I wonder if George Lucas intended it as a joke or if he thought a parsec was a unit of time. The latter because it was corrected in the novelization. Errr... didn't one of the novels explain it away by describing the kessel run as a region of space warped by black holes or other objects? Bragging rights for crossing such a field thus centered on shortest distance instead of time. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: Why not a Python compiler?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Luis M. González Sent: Tuesday, February 05, 2008 6:44 PM To: python-list@python.org Subject: Re: Why not a Python compiler? Pypy is a very ambitious project and it aims, amongst many other goals, to provide a fast just-in-time python implementation. They even say that the secret goal is being faster than c, which is nonsense, isn´t it? (I still didn´t get the joke though...). 'c' is also the speed of light. And since nothing can travel faster than light... One demerit has been marked against your geek card for missing an obvious science pun. Additionally, your membership to the Star Trek Lifestyle Adventure Club has been put on probationary status for the next twelve parsecs. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Why not a Python compiler?
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Grant Edwards Sent: Wednesday, February 06, 2008 10:35 AM To: python-list@python.org Subject: Re: Why not a Python compiler? On 2008-02-06, Reedick, Andrew [EMAIL PROTECTED] wrote: Pypy is a very ambitious project and it aims, amongst many other goals, to provide a fast just-in-time python implementation. They even say that the secret goal is being faster than c, which is nonsense, isn´t it? (I still didn´t get the joke though...). 'c' is also the speed of light. 'c' is the speed of light _in_a_vacuum_. True. And since nothing can travel faster than light... Nothing can travel faster than the speed of light _in_a_vacuum_. There are situtaitons where things can (and regularly do) travel faster than light: http://en.wikipedia.org/wiki/Cherenkov_radiation Nope. It propagates, not travels, faster than light. Go ask a physicist to explain it. It's odd... One demerit has been marked against your geek card for missing an obvious science pun. Additionally, your membership to the Star Trek Lifestyle Adventure Club has been put on probationary status for the next twelve parsecs. Ouch. Two demerits for using the distance unit parsec in a context where a quantity of time was required. Ten demerits for not catching the Star Wars Kessel Run reference. -- http://mail.python.org/mailman/listinfo/python-list
RE: Using Regular Expressions to Parse SQL
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Tuesday, February 05, 2008 9:31 AM To: python-list@python.org Subject: Using Regular Expressions to Parse SQL My pattern does not even come close. Any help would be greatly appreciated. My goal is to analyse a large number of SQL querys to try to identify the join field and see where indexing might make sense. While I am mostly interested in understanding regular expressions, I would also be interested in knowing about any Python SQL parsers out there. Python's regexes are a tad odd compared to Perl (or Perl's regexes are odd. Relativity.) You need re.DOTALL to handle newlines in the sql: DOTALL Make the . special character match any character at all, including a newline; without this flag, . will match anything except a newline. import re s= ''' FROM ((qry_Scores_Lookup1 INNER JOIN CSS_Rpt1 ON (qry_Scores_Lookup1.desc = CSS_Rpt1.desc) AND (qry_Scores_Lookup1.lastcdu = CSS_Rpt1.lastcdu))''' pat = r(^|\s+)FROM\s.+\s(?:INNER|LEFT|RIGHT)\s+JOIN\s.+\sON\s+((\s*(?:\S+)\s* =\s*(?:\S+))(?:\s+|\s+AND\s+|$))+ m = re.compile(pat, re.DOTALL).match(s) if m: print m ('(qry_Scores_Lookup1.desc = CSS_Rpt1.desc) ', '(qry_Scores_Lookup1.desc = CSS_Rpt1.desc)') You should be able to tweak the regex to get the exact matches you want. An alternative to writing a lengthy regex might be to just grab everything after the ON and then string split on AND. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: Python noob SOS (any [former?] Perlheads out there?)
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of kj Sent: Tuesday, January 29, 2008 11:39 AM To: python-list@python.org Subject: Python noob SOS (any [former?] Perlheads out there?) For many months now I've been trying to learn Python, but I guess I'm too old a dog trying to learn new tricks... For better or worse, I'm so used to Perl when it comes to scripting, that I'm just having a very hard time getting a hang of The Python Way. It's not the Python syntax that I'm having problems with, but rather with larger scale issues such as the structuring of packages, techniques for code reuse, test suites, the structure of distributions,... Python and Perl seem to come from different galaxies altogether... It sound like less of a How to do Things the Python Way problem, a more of a How to do Object Oriented Programming problem. Coming from a C++/Perl background, I found the O'Reilly 'Learning Python' book to be useful. It has a section on OOP, which covers basic OO theory that you may find useful. I can't think of a decent OO book to recommend though. Be that as it may, the activation barrier to using Python for my scripting remains too high. I'd written a Perl module to facilitate the writing of scripts. It contained all my boilerplate code for parsing and validating command-line options, generating of accessor functions for these options, printing of the help message and of the full documentation, testing, etc. Bleh. Perl and Python have really good libraries. Why waste time rolling your own when you can use Python's getopt or optparse, or Perl's Getopt and Getopt::Long? -- http://mail.python.org/mailman/listinfo/python-list
RE: Stripping whitespace
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of John Machin Sent: Wednesday, January 23, 2008 5:48 PM To: python-list@python.org Subject: Re: Stripping whitespace On Jan 24, 7:57 am, Reedick, Andrew [EMAIL PROTECTED] wrote: Why is it that so many Python people are regex adverse? Use the dashed line as a regex. Convert the dashes to dots. Wrap the dots in parentheses. Convert the whitespace chars to '\s'. Presto! Simpler, cleaner code. pattern = re.sub(r'-', r'.', line) pattern = re.sub(r'\s', r'\\s', pattern) pattern = re.sub(r'([.]+)', r'(\1)', pattern) Consider this: pattern = ' '.join('(.{%d})' % len(x) for x in line.split()) Good. But the main drawback to using split+join is that it works if there is only one whitespace char acting as a column separator (split+join will compress multiple whitespace characters down to one char.) Normally, it's safe to assume a one character separator between columns, however since the input is supposed to be tab delimited (but wasn't) and tabs tend to get randomly converted to spaces depending on which butterfly is flapping its wings at any given instant, keeping the original whitespace column separators is probably a good idea. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: piping into a python script
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Donn Sent: Thursday, January 24, 2008 12:03 PM To: Michał Bentkowski Cc: python-list@python.org Subject: Re: piping into a python script I have tested getopt and it strips the lone '-' out. I can get it from Try 'foo.py -- -'. The '--' normally tells the parser to stop parsing args. Ex: date -foo.txt; rm -foo.txt; rm -- -foo.txt I think this will tell you if stdin is being piped in or not: import sys import os print os.isatty(sys.stdin.fileno()) D:\type a.txt | python a.py False D:\python a.py True Also if you're lazy, look at the StringIO class: if options.filelist is None and len(args) 1: # read from stdin f = sys.stdin elif options.filelist is not None and len(args) 1: # read filenames from file f = open(options.filelist, 'r') elif options.filelist is None and len(args) 0: # filenames on command line f = StringIO.StringIO('\n'.join(args)) else: ## Thanks for playing. parser.print_help() exit(1) if f: for filename in f: -- Segio Aragones (Groo the Wanderer Number 99) Ah yes, Groo. Ever wonder who would win if Groo and Forrest Gump fought each other? -- http://mail.python.org/mailman/listinfo/python-list
RE: Stripping whitespace
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of ryan k Sent: Wednesday, January 23, 2008 3:24 PM To: python-list@python.org Subject: Re: Stripping whitespace On Jan 23, 3:02 pm, John Machin [EMAIL PROTECTED] wrote: On Jan 24, 6:57 am, ryan k [EMAIL PROTECTED] wrote: So yea i will just have to count dashes. Read my lips: *you* counting dashes is dumb. Writing your code so that *code* is counting dashes each time it opens the file is smart. Okay it's almost working ... Why is it that so many Python people are regex adverse? Use the dashed line as a regex. Convert the dashes to dots. Wrap the dots in parentheses. Convert the whitespace chars to '\s'. Presto! Simpler, cleaner code. import re state = 0 header_line = '' pattern = '' f = open('a.txt', 'r') for line in f: if line[-1:] == '\n': line = line[:-1] if state == 0: header_line = line state += 1 elif state == 1: pattern = re.sub(r'-', r'.', line) pattern = re.sub(r'\s', r'\\s', pattern) pattern = re.sub(r'([.]+)', r'(\1)', pattern) print pattern state += 1 headers = re.match(pattern, header_line) if headers: print headers.groups() else: state = 2 m = re.match(pattern, line) if m: print m.groups() f.close() * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: How to use only a sub shell to execute many commands in python
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of raocheng Sent: Friday, January 18, 2008 6:31 AM To: python-list@python.org Subject: How to use only a sub shell to execute many commands in python Please see the following code. Suppose I have many shell commands to be executed. And I don't want to fork a sub shell for each command(eg: status,output = commands.getstatusoutput(cmd)) because it is too expensive. I want to use only one sub shell to execute all these commands and want to get each command's output. How can I accomplish this task ? Thanks in advance. === #!/usr/bin/env python import os fi, fo = os.popen2( ''' while read line do eval $line done ''', 't') #Suppose I have many commands to execute, but I don't want to fork a sub shell for each command cmds = ['date','uptime','pwd','ls -rltF','who'] for cmd in cmds: #pseudocode fi.executeCmd(cmd) output = fo.readResult() print output Have each command write to a unique temp file. Create temp files in python cmd = 'date /tmp/date_temp 21 ; uptime /tmp/uptime_temp 21; ...' execute cmd for file in tempfiles: ... You can also get the return value of each command cmd = 'date /tmp/date_temp 21; echo $? /tmp/date_temp; uptime /tmp/uptime_temp 21; echo $? ...' * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: how to resolve Windows pathnames into cygwin ones
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Friday, January 18, 2008 11:11 AM To: python-list@python.org Subject: how to resolve Windows pathnames into cygwin ones I am looking for a function to resolve 'F:/foo/bar' into '/cygdrive/f/ foo/bar'. I get the original dirpath from tkFileDialog.askdirectory in a Windows form and none of os.path.* functions seem to resolve it to a cygwin form. Rather they _append_ it to the current directory, resulting at best in a monster '/cygdrive/c/whatever/f/foo/bar'. It's all being developed under cygwin currently (so it is a kind of mixed environment), but I would like the fix to work correctly in any environment. Firstly, '/cygdrive' is overrated. Cygwin will accept: 'ls c:\\foo' and 'ls c:/foo' s= 'f:\\foo\\bar' print re.sub(r'\\', '/', s) m = re.match('^(.):(.*)$', s) print '/cygdrive/' + m.group(1) + re.sub(r'\\', '/', m.group(2)) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Filtering two files with uncommon column
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Madhur Sent: Friday, January 18, 2008 4:23 AM To: python-list@python.org Subject: Filtering two files with uncommon column Basically I want to compare the two files based on second column. If the second column matches on both the files do not print anything, else if there is no matc h in for the second column for first file in second file then print it under Fil e1 header, else if there is no match for the second column for second file in fi rst file print it under File2 header. I often do this to compare property files between environments. The follow algorithm works for any number of files by creating a dictionary of lists (or hash of arrays in Perl-ese.) Create a dictionary Index = -1 For file in files Index++ For line in file col = match/split/regex the column If col not in dictionary Dictionary[col] = [] extend dictionary[col] to length of index dictionary[col][index] = col for col in sort(dictionary.keys()): extend dictionary[col] to length of index print dictionary[col] * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: Creating unique combinations from lists
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Tim Chase Sent: Wednesday, January 16, 2008 3:40 PM To: breal Cc: python-list@python.org Subject: Re: Creating unique combinations from lists You can use a recursive generator: def iterall(*iterables): if iterables: for head in iterables[0]: for remainder in iterall(*iterables[1:]): yield [head] + remainder else: yield [] for thing in iterall( ['big', 'medium', 'small'], ['old', 'new'], ['blue', 'green'], ): print thing Recursion definitely makes for an elegant solution. However you do take a bit of a performance hit. If performance matters (and comprehensions are supposed to be optimized/fast) and you want a works for N nested loops solution, then you could build a N deep comprehension on the fly and eval() it: def gen(lists): out = '[' + ','.join([v%s % i for i in range(len(lists))]) + ']' comp = ''.join([ for v%d in lists[%d] % (i, i) for i in range(len(lists))]) return eval('[ ' + out + comp + ' ]') gen([a, b, c]) So for a three item list, it would build and execute the following comprehension: [ [v0,v1,v2] for v0 in lists[0] for v1 in lists[1] for v2 in lists[2] ] Seven item list: [ [v0,v1,v2,v3,v4,v5,v6] for v0 in lists[0] for v1 in lists[1] for v2 in lists[2] for v3 in lists[3] for v4 in lists[4] for v5 in lists[5] for v6 in lists[6] ] Some rough performance numbers in seconds for 1,000 iterations over a three item list: list comprehension: 0.74 nested for loop : 0.97 31% slower recursion : 3.91 428% slower =P eval : 1.11 50% slower from timeit import Timer s = a = [ i for i in range(10) ]; b = a; c = a t = Timer( l = [ [i, j, k] for i in a for j in b for k in c], s) iterations = 1000 print list comprehension: %4.2f % t.timeit(iterations) t = Timer(''' l = [] for i in a: for j in b: for k in c: l.append([i, j, k]) ''', s) print nested for loop : %4.2f % t.timeit(iterations) t = Timer(''' def iterall(*iterables): if iterables: for head in iterables[0]: for remainder in iterall(*iterables[1:]): yield [head] + remainder else: yield [] for thing in iterall(a, b, c): pass #print thing ''', s) print recursion : %4.2f % t.timeit(iterations) t = Timer(''' def gen(lists): out = '[' + ','.join([v%s % i for i in range(len(lists))]) + ']' comp = ''.join([ for v%d in lists[%d] % (i, i) for i in range(len(lists))]) return eval('[ ' + out + comp + ' ]') gen([a, b, c]) ''', s) print eval : %4.2f % t.timeit(iterations) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Creating unique combinations from lists
-Original Message- From: Tim Chase [mailto:[EMAIL PROTECTED] Sent: Thursday, January 17, 2008 10:30 AM To: Reedick, Andrew Cc: breal; python-list@python.org; [EMAIL PROTECTED] Subject: Re: Creating unique combinations from lists Yick...a nice demo of the power of eval, but definitely filed under the Hack heading :) You hurt my feeling. *sniffle* Given how late python compiles/evaluates code blocks, I'm thinking that eval() is less hack and more paradigm ..err.. pythonic. ;-) I think Martin's solution/recommendation[1] is better (readability-wise, and less apt to shoot yourself in the foot with some bogus generated code-wise) if you don't mind building the whole result set in memory which your eval() solution does as well. I'm curious to see the timing results from adding that recipe to your test-suite. Cookbook is relatively decent. 5 deep, 100 iterations: list comprehension: 11.02 nested for loop : 13.16 +19% cookbook : 18.85 +71% recursion : 69.00 +526% eval : 13.30 +20% The advantage to the recursive-generator solution is that it should really only keep your initial input and the current result in memory as the generated item, so you can reasonably iterate over millions of rows without having gigs of RAM. I don't believe the recursion will go deeper than the number of lists you're iterating over, so the stack shouldn't explode. Excellent point about memory usage. However, since we're dealing with exponential algorithms, will you run out of time or memory first? Here's the test code if anyone wants to play with it. It will let you specify the levels of nested loops and display the generated code. Usage: foo.py num_nested_loops num_iterations import sys from timeit import Timer def CreateComprehension(lists): out = '[' + ','.join([v%s % i for i in range(len(lists))]) + ']' comp = ''.join([ for v%d in lists[%d] % (i, i) for i in range(len(lists))]) return '[ ' + out + comp + ' ]' num_loops = int(sys.argv[1]) iterations = int(sys.argv[2]) results = [] lists = '''lists = [] for i in range(%d): lists.append(range(i, i+10)) ''' % (num_loops) print print lists print print code = 'r = ' + CreateComprehension(range(num_loops)) t = Timer(code, lists) results.append(list comprehension: %4.2f % t.timeit(iterations)) print results[-1:][0] print code print print code = 'r = []\n' for i in range(num_loops): code +=* i code += for v%d in lists[%d]:\n % (i, i) code += ' ' * num_loops code += 'r.append([' code += ','.join( ['v%d' % i for i in range(num_loops)]) code += '])' t = Timer(code, lists) results.append(nested for loop : %4.2f % t.timeit(iterations)) print results[-1:][0] print code print print code = '''r=[[]] for x in lists: t = [] for y in x: for i in r: t.append(i+[y]) r = t ''' t = Timer(code, lists) results.append(cookbook : %4.2f % t.timeit(iterations)) print results[-1:][0] print code print print code = ''' r = [] def iterall(*iterables): if iterables: for head in iterables[0]: for remainder in iterall(*iterables[1:]): yield [head] + remainder else: yield [] for thing in iterall(%s): r.append(thing) ''' % ( ','.join([ 'lists[%d]' % i for i in range(num_loops) ]) ) t = Timer(code, lists) results.append(recursion : %4.2f % t.timeit(iterations)) print results[-1:][0] print code print print code = ''' def gen(lists): out = '[' + ','.join([v%s % i for i in range(len(lists))]) + ']' comp = ''.join([ for v%d in lists[%d] % (i, i) for i in range(len(lists))]) return eval('[ ' + out + comp + ' ]') gen(lists) ''' t = Timer(code, lists) results.append(eval : %4.2f % t.timeit(iterations)) print results[-1:][0] print code print print '\n'.join(results) * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: Creating unique combinations from lists
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of breal Sent: Wednesday, January 16, 2008 2:15 PM To: python-list@python.org Subject: Creating unique combinations from lists I have three lists... for instance a = ['big', 'small', 'medium']; b = ['old', 'new']; c = ['blue', 'green']; I want to take those and end up with all of the combinations they create like the following lists ['big', 'old', 'blue'] ['small', 'old', 'blue'] ['medium', 'old', 'blue'] ['big', 'old', 'green'] ['small', 'old', 'green'] ['medium', 'small', 'green'] ['big', 'new', 'blue'] ['small', 'new', 'blue'] ['medium', 'new', 'blue'] ['big', 'new', 'green'] ['small', 'new', 'green'] ['medium', 'new', 'green' ] I could do nested for ... in loops, but was looking for a Pythonic way to do this. Ideas? http://www.python.org/dev/peps/pep-0202/ -- http://mail.python.org/mailman/listinfo/python-list
RE: __init__ explanation please
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Lie Sent: Tuesday, January 15, 2008 5:03 PM To: python-list@python.org Subject: Re: __init__ explanation please I've been in this Python mailing list for a few days, and I've noticed several things here: There are too many fundamentalist! Don't play stupid and all, don't be a fundamentalist. It might be true that __init__ isn't a constructor and __new__ might be the constructor (some people even claimed __new__ is also not a constructor). Purist is a better term. Fundamentalist is three syllables closer to Holy War. From the base definition of a constructor: constructor is the creator of an object. In this case, __new__ is technically the constructor while __init__ is an initializer. However, it is also to be noted that __init__ is what makes an object meaningful, and that makes it a constructor in a sense (while still technically a constructor). Without initialization, an object is meaningless, even if the definition of the initializer is to leave it as it is. You don't need to have an __init__ defined. A subclass has to explicitly call the parent's __init__ or the parent's __init__ is never run. If the __init__ makes the object meaningful, then how meaningful is an object without an __init__? I'm pretty sure that an object without an __init__ is still a viable, working object. If you can't be convinced with this argument, then I'd give you another that's a bit more Pythonic: DUCK TYPING: If it looks like a duck, walks like a duck, and quacks like a duck, it is a duck! But you don't need __init__ to be a duck! From the class programmer's point of view, __init__ acts like an object constructor in other languages, there is no significant difference between __init__ and constructor in other languages. How many times can you call an object's constructor in other languages? __init__ can be called repeatedly. __init__ is the last straw that breaks the camel's back. Or rather, the last method we see in the object creation process, and thus must be 'guilty' of being a constructor. Only a fundamentalist would blame the victim instead of the real criminal, __new__. We're splitting hairs. And I'm pretty sure that, aside from being a spiffy thought experiment, no one cares as long as it works and makes sense. =) Repeated for clarity: smiley -- =) -- smiley * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: encrypting python modules
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Paul Sijben Sent: Friday, January 11, 2008 4:45 AM To: python-list@python.org Subject: encrypting python modules The problem: I have a client-server app written in python. I want to make sure that the client is not: 1) destabilized by users accidentally or on purpose dropping python files in the path (after which calling the helpdesk will not be useful) 2) extended with new features without me knowing about it (again resulting in calls to my helpdesk...) Would the site module help with that? It looks like site will let you put your modules first in sys.path. Or what about just updating sys.path as the first action in your program? Or what about pulling clean copies of the files from a tar/zip/archive before execution? A shell script creates a temp dir and extracts the files to the temp dir to run. Not sure it would do any good to pull from an encrypted tar/zip/archive. Or what about pulling the client files from the server instead of a tar/zip/archive...? * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: __init__ explanation please
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Hrvoje Niksic Sent: Monday, January 14, 2008 11:29 AM To: python-list@python.org Subject: Re: __init__ explanation please Mel [EMAIL PROTECTED] writes: I don't understand the purpose of this correction. After all, __init__ *is* the closest equivalent to what other languages would call a constructor. Nevertheless, __init__ doesn't construct anything. Only if by construct you mean allocate. __init__ starts out with an empty object and brings it to a valid state, therefore constructing the object you end up with. That operation is exactly what other languages call a constructor. Nah. Most other languages combine the constructor and an init function. Normally with c++ I'll have the constructor call an Init() function so I can re-initialize the object as needed. Python has explicitly split the two. Besides, the Python docs say that __new__ is the constructor and __init__ may or may not be called after the instance is created: __new__( cls[, ...]) Called to create a new instance of class cls. __new__() is a static method (special-cased so you need not declare it as such) that takes the class of which an instance was requested as its first argument. The remaining arguments are those passed to the object constructor expression (the call to the class). The return value of __new__() should be the new object instance (usually an instance of cls). ... If __new__() returns an instance of cls, then the new instance's __init__() method will be invoked ... If __new__() does not return an instance of cls, then the new instance's __init__() method will not be invoked. __init__( self[, ...]) Called when the instance is created. ... As a special constraint on constructors, no value may be returned; Also, how can a constructor require 'self' as an argument...? __init__(self, ...) If the __init__ function is called by the constructor it cannot return a value. However if called as a normal function, it can return a value. __init__ is just a function that gets called by the constructor, which is __new__. count = 0 class AClass (object): def __init__ (self): self.a = 4 global count if count 0: return 'hello world' count += 1 a = AClass() print a.a print a.__init__() c:\foo\a.py 4 hello world * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: python recursive function
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Tom_chicollegeboy Sent: Friday, January 11, 2008 3:30 AM To: python-list@python.org Subject: python recursive function Now, you are to write a program that, if I give you n bears, returns true if it is at all possible for you to win the game. Your program must use recursion to check all possible ways in which you can apply the rules. if n==42: return True return False You have to check for all possible paths. Returning True/False is futile since the recursive chains will be returning a mix of true and false. Use a global variable to indicate if a solution is found. (Or pass the flag in using a list, since lists are passed by reference (if n == 42: found_it[0] = True; return.) There's also another teaching exercise in here. Do you follow the literal directions ('check all possible ways') and generate all possible paths? Or do you 'interpret' that to mean try all possible paths until you find a solution? (i.e. do you short circuit the recursion once you have a solution?) One of the most difficult things about programming is conveying the requirements from Human A to Human Programmer B. This is especially difficult since business people and techies speak different languages and, more importantly, think differently (different assumptions, different paradigms, different levels of hand-waving away of details, etc..) And don't get me started about the people in marketing... * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: reading a specific column from file
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Ivan Novick Sent: Friday, January 11, 2008 12:46 PM To: python-list@python.org Subject: Re: reading a specific column from file You say you would like to read a specific column. I wonder if you meant read all the data and then just seperate out the 3rd column or if you really mean only do disk IO for the 3rd column of data and thereby making your read faster. The second seems more interesting but much harder and I wonder if any one has any ideas. Do what databases do. If the columns are stored with a fixed size on disk, then you can simply compute the offset and seek to it. If the columns are of variable size, then you need to store (and maintain) the offsets in some kind of index. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: split parameter line with quotes
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of teddyber Sent: Friday, January 11, 2008 1:51 PM To: python-list@python.org Subject: split parameter line with quotes Hello, first i'm a newbie to python (but i searched the Internet i swear). i'm looking for some way to split up a string into a list of pairs 'key=value'. This code should be able to handle this particular example string : qop=auth,auth-int,auth-conf,cipher=rc4-40,rc4-56,rc4,des, 3des,maxbuf=1024,charset=utf-8,algorithm=md5-sess i know i can do that with some regexp (i'm currently trying to learn that) but if there's some other way... import re s='''qop=auth,auth-int,auth-conf,cipher=rc4-40,rc4-56,rc4,des,3des,m axbuf=1024,charset=utf-8,algorithm=md5-sess''' print s all = re.findall(r'(.*?)=(.*?|[^]*?)(,|$)', s) print all for i in all: print i[0], =, i[1].strip('') Output: qop=auth,auth-int,auth-conf,cipher=rc4-40,rc4-56,rc4,des,3des,maxbuf =1024,charset=utf-8,algorithm=md5-sess [ ('qop', 'auth,auth-int,auth-conf', ','), ('cipher', 'rc4-40,rc4-56,rc4,des,3des', ','), ('maxbuf', '1024', ','), ('charset', 'utf-8', ','), ('algorithm', 'md5-sess', '') ] qop = auth,auth-int,auth-conf cipher = rc4-40,rc4-56,rc4,des,3des maxbuf = 1024 charset = utf-8 algorithm = md5-sess * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: Newbie question on Classes
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of John Machin Sent: Friday, January 11, 2008 4:08 PM To: python-list@python.org Subject: Re: Newbie question on Classes On Jan 11, 9:27 am, Reedick, Andrew [EMAIL PROTECTED] wrote: -Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Adrian Wood Sent: Thursday, January 10, 2008 4:47 PM To: [EMAIL PROTECTED] Subject: Newbie question on Classes How about searching the garbage collector? Not a good idea, because gc is an implementation artifact and in fact is specific to the C Python implementation; you won't find it in e.g. Iron Python or Jython. a) I forgot the ';-)' and/or tongue_in_cheek tag. b) It was junk code. A cleaner loop would be (which I figured out 5 minutes after posting =P ): for i in gc.get_objects(): if isinstance(i, Person): print i.__class__, %x % id(i), i.SomeMethod() c) It's good to know about GC being CPython only. d) You forgot to mention the problem that some of the objects could be 'deleted' but not garbage collected yet. e) Most importantly, anyone who is using the garbage collector as their object manager isn't into proper coding practices in the first place. -- http://mail.python.org/mailman/listinfo/python-list
RE: alternating string replace
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of cesco Sent: Wednesday, January 09, 2008 5:34 AM To: python-list@python.org Subject: alternating string replace Hi, say I have a string like the following: s1 = 'hi_cat_bye_dog' and I want to replace the even '_' with ':' and the odd '_' with ',' so that I get a new string like the following: s2 = 'hi:cat,bye:dog' Is there a common recipe to accomplish that? I can't come up with any solution... For those of us who still think in Perl, here's an easy to read, lazy solution: s = 'hi_cat_bye_dog' print s s = re.sub(r'_(.*?(_|$))', r':\1', s) ## every odd '_' to ':' print s s = re.sub(r'_', r',', s) ## every even '_' to ',' print s hi_cat_bye_dog hi:cat_bye:dog hi:cat,bye:dog The equivalent Perl code: my $s = 'hi_cat_bye_dog'; print $s, \n; $s =~ s/_(.*?(_|$))/:$1/g; print $s, \n; $s =~ s/_/,/g; print $s, \n; -- http://mail.python.org/mailman/listinfo/python-list
RE: Newbie question on Classes
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Adrian Wood Sent: Thursday, January 10, 2008 4:47 PM To: python-list@python.org Subject: Newbie question on Classes I can call man.state() and then woman.state() or Person.state(man) and Person.state(woman) to print the status of each. This takes time and space however, and becomes unmanageable if we start talking about a large number of objects, and unworkable if there is an unknown number. What I'm after is a way to call the status of every instance of Man, without knowing their exact names or number. How about searching the garbage collector? import gc from random import random class Person: def __init__(self): self.data= random() * 1000 + 1 def WhoAmI(self): return self.data a = Person() b = Person() for i in gc.get_objects(): try: # classes have __class__ and __dict__ defined according to the docs if i.__class__ and i.__dict__ : print i.__class__ if str(i.__class__) == '__main__.Person': print \tI am, i.WhoAmI() except: pass * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: 'Borg' and multiple threads.
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Tobiah Sent: Monday, January 07, 2008 5:24 PM To: python-list@python.org Subject: 'Borg' and multiple threads. I have a class that I call Borg that starts like this: class Borg(dict): static_state = {} def __init__(self): self.__dict__ = self.static_state My question is why this seems to work. I had the idea that there was a class object that is created when the file containing the definition is read, which actually contains the static information that is later accessed by instances. Isn't this done when the cherrypy app first loads, rather than each time a browser hits the app? Otherwise, where is the individual data stored for each of two simultaneous hits of the web page? I had a similar question except mine was from a bug. (Thinking in c++ lead me to inadvertently create static class vars.) You can print self and use the id() function to get the memory addresses of the variables and see what's going on. In the code below, mem4 is equivalent to your static_state. count = 1 class Foo: mem4 = {} mem5 = {} def __init__(self): self.mem = {} global count count += 1 self.mem2 = count self.mem3 = %x % (id(self)) self.mem5 = {} print 'init count =', count def me(self): print object: , self print \tid(self.mem) %x % (id(self.mem)), self.mem =, self.mem print \tid(self.mem2) %x % (id(self.mem2)), self.mem2 =, self.mem2 print \tid(self.mem3) %x % (id(self.mem3)), self.mem3 =, self.mem3 print \tid(self.mem4) %x % (id(self.mem4)), self.mem4 =, self.mem4 print \tid(self.mem5) %x % (id(self.mem5)), self.mem5 =, self.mem5 global count count += 1 print '\tcount =', count self.mem4[count] = count print \tid(self.mem4) %x % (id(self.mem4)), self.mem4 =, self.mem4 #self.mem += count #print \tid(self.mem) %x % (id(self.mem)), self.mem =, self.mem print a = Foo() b = Foo() c = Foo() a.me() b.me() c.me() -- http://mail.python.org/mailman/listinfo/python-list
RE: printing dots in simple program while waiting
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Martin Marcher Sent: Wednesday, January 09, 2008 11:57 AM To: python-list@python.org Subject: Re: printing dots in simple program while waiting John wrote: import time s = '.' print 'working', # Note the , at the end of the line while True: print s time.sleep(1) see my comment in the code above... if that's what you mean Bah. The trailing command may prevent the newline, but it appends a space whether you want it or not.[1] Use sys.stdout.write('.') instead. import sys print wussy nanny state, tax 'n spend my spaces, liberal comma: for i in range(1, 10): print '.', print print manly neo-con I know what's Right so keep your government out of my strings! print: for i in range(1, 10): sys.stdout.write('.') [1] Which has to be _the_ most annoying feature of Python. *grrr* * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
RE: problem of converting a list to dict
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Fredrik Lundh Sent: Wednesday, January 09, 2008 2:39 PM To: python-list@python.org Subject: Re: problem of converting a list to dict [EMAIL PROTECTED] wrote: to see what's going on on your machine, try printing a after the split, but before you use it to populate the dictionary. 'print a' works so what does it tell you? A bigger hint: a=i.split('=') print '%s' splits into % (i), a assert len(a) == 2 mydict[a[0]]=a[1] -- http://mail.python.org/mailman/listinfo/python-list
RE: problem of converting a list to dict
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of John Machin Sent: Wednesday, January 09, 2008 3:02 PM To: python-list@python.org Subject: Re: problem of converting a list to dict On Jan 10, 6:52 am, Reedick, Andrew [EMAIL PROTECTED] wrote: A bigger hint: a=i.split('=') print '%s' splits into % (i), a consider: (1) using %r instead of '%s' Eh, personal preference depending on how sure you are of the data's type. (2) omitting the redundant space after 'into' Some of us coming in from other languages and still aren't used to the comma adding an unwanted space after everything. I've been tempted to root around in Python's source code to fix the problem. (3) losing the redundant () around i For me, the () is there for readability. Python's sprintf syntax is odd to begin with, and something like print '%s' splits into % i, a, b, c means either 1) you really do want to append b and c after the sprintf, or print '%s' splits into % (a), b, c 2) that the formatting string is missing a few things print '%s' splits into % (a, b, c) ## Ooops! forgot to change it to %s %5.2d %6.3f * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622 -- http://mail.python.org/mailman/listinfo/python-list
RE: dictionary/hash and '1' versus 1
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Steven D'Aprano Sent: Saturday, January 05, 2008 7:01 PM To: python-list@python.org Subject: Re: dictionary/hash and '1' versus 1 The problem with automatic conversions between strings and integers is that it isn't clear what the user wants when they do something like this: x = '1' + 1 Should x be the string '11' or the int 2? Please justify your answer. On the other hand, if the language includes separate operators for addition and concatenation (say, + and ) then that sort of auto- conversion is no longer ambiguous: '2' + 3 5 '2' 3 '23' Bingo. Perl has specific operators to establish intent: Perl -e '1' + 1 2 Perl -e '1' . 1 11 '+' is the operator for addition '.' is the operator for string concatenation int and string comparisons also have specific operators: $a == $b # compare as integers: ==, , , =, = $a eq $b # compare as strings: eq, gt, lt, le, ge Which now morphs the conversation into the issue of how too much operator overloading creates confusion and/or ambiguity. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
RE: dictionary/hash and '1' versus 1
-Original Message- From: [EMAIL PROTECTED] [mailto:python- [EMAIL PROTECTED] On Behalf Of Paddy Sent: Monday, January 07, 2008 12:52 PM To: python-list@python.org Subject: Re: dictionary/hash and '1' versus 1 Or how using different operators for similar operations on different types causes confusion. i.e. == versus eq; versus gt If Perl had, for example, a complex number 'base' type would that need yet another set of operators? The real question is: what's the simplest way to implement complex numbers without sacrificing understanding, accuracy, and convenience? I would say, no new operators. Imaginary numbers are numbers and should use numeric operations which means overloaded match operators. As background: In order to keep things simple, Perl's string operators are string-like. Math operators are math. '2' * 5 = 10 '2' x 5 = '2' ('x' is a char, so think strings) ==, , =, , = eq, gt, ge, lt, le (string abbreviations for equal, greater than, etc.) '1' + 1 = 2 '1' . 1 = 11(Think period at the end of a sentence, which implies stringing strings together.) Well enough Perl vs Python. The thing is, that when writing in another programming language you have to use its idioms or you end up fighting the language in attempt to make it work like another language you are more familiar with. In Python strings won't ever automatically change to numbers. Agreed. However looking towards the future (new versions of Perl/Python, new languages, new paradigms) is it worth asking whether it's better/clearer/easier/more_accurate to a) type cast the data: a + b (a and b must be of the same type) a.1) explicitly type cast the data: str(a) + str(b) (if a and b are different types) b) type cast by operator: '1' + 1 = 2; '1' . 1 = '11' c) go really old school with: concat('1', 1); add('1', 1) IMO, since Python is strongly but dynamically typed, a) is the 'worst' solution. If you forget to type cast, you're boned, since you probably won't find the problem until the code block is actually executed and an exception is thrown. You could defensively type cast everything, but that can clutter the code, and cluttered code is harder to understand and keep bug free. With b) or c), the compiler will type cast as you intended. Again, just my opinion. Anyway, it's little things like '1' + 1 that will probably prevent programming syntax from ever being similar to naturally spoken language. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list
RE: dictionary/hash and '1' versus 1
From: Stephen Hansen [mailto:[EMAIL PROTECTED] Sent: Thursday, January 03, 2008 7:39 PM To: Reedick, Andrew Cc: python-list@python.org Subject: Re: dictionary/hash and '1' versus 1 Well one important thing to learn while learning Python is that while the language is dynamically typed-- it is also /strongly/ typed. Every piece of data has an explicit type and it doesn't change unless you change it. Meh, mixing dynamic and strong typing is a mixed blessing. You don't find out that you screwed up the data types until the code block is actually executed. Reminds me of Nostradamus. He may have predicted the future[1], but the predictions are so vague/convoluted that you can only figure out the predictions in hindsight. It relies on duck typing a lot, and doesn't care if you mix and match (even partially) compatible types as long as the operations are there, but one type will always be distinct and remain that type until you explicitly convert it. A single integer is distinctly different from a sequence of characters in some encoding that may just happen to contain representations of a number so they'll hash differently :) Depends on the context. The machine encoding may be different, but in human terms they should be the same. Perl managed to achieve an impressive blend of presenting data as human friendly or as machine bits when it made sense to do so. So much so, that Perl is probably the only language I've used that will do what you mean instead of what you say. Nice, but frightening in some ways. One type will basically never implicitly convert into another type. To me, this sounds like the function should have converted the type explicitly on return. Or maybe you need to convert it explicitly on receipt. Type casting is easy, IFF you remember to do so. The problem was that I missed the fact that one (important) function was returning a string instead of an int, and since Python supports heterogenous data structures, the human has to remember to keep the key's data type homongenous. That and Perl does so much automatic type conversion in such a sensible way, that I stopped worrying about mixing data types, which is making the Python transition a tad more error prone. Because of Perl, I almost consider automatic type casting to be the next you don't have to manage your own memory that people loved about Java. =O But if you are in a use-case where you really don't care and only want to hash strings, you can create a dict subclass easily that overrides __setitem__ to always str() the input. Check out the UserDict class. UserDict looks like it could be useful. Thanks for the info. A similar method lets you make 'case-insensitive' dicts, for example. Were such a thing to happen automagically, you could get some weird situations, such as assert (key in dict) == (key in dict.keys()) failing. I'm assuming that you would just need to overload the 'in' operator and .keys() method to be case insensitive also. [1] No, he didn't. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA625 -- http://mail.python.org/mailman/listinfo/python-list
dictionary/hash and '1' versus 1
As a Perl monkey in the process of learning Python, I just stepped on the '1' (string) is not the same as 1 (integer) in regards to keys for dictionaries/hashes landmine. Is there a good way to ensure that numbers represented as strings or ints do not get mixed up as keys? Example of the problem: h2 = { 1 : ''} print h2.has_key(1) True print h2.has_key('1') False The problem occurred because a method used to generate keys was returning a string instead of a number without an explicit conversion taking place. And since I was using hash.get(i, default_value) to avoid having to pair every key lookup with a hash.has_key(), no exception was thrown when the key wasn't found. It's fugly to wrap every key reference in str(), ex: foo[str(some_func(i))]. It's tedious to add a has_key before every key lookup. And I have no real desire to stuff every hash inside a class in order to ensure that keys are converted to strings. Any good solutions or accepted practices to prevent the intermixing of number strings and integers as hash keys? A hash wrapper class seems to be the best bet so far. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA623 -- http://mail.python.org/mailman/listinfo/python-list
AIX Subversion Python Swig Bindings fix for core dump
If you're on AIX and Python immediately dumps core when trying to import any SVN module, then adding -Wl,-brtl to LINKFORSHARED in the Makefile seems to fix the problem. Bad:LINKFORSHARED=-Wl,-bE:Modules/python.exp -lld Good: LINKFORSHARED=-Wl,-bE:Modules/python.exp -lld -Wl,-brtl 1. unset PYTHONPATH 2. ./configure --without-gcc --disable-ipv6 --with-thread CC=/usr/vac/bin/xlc_r CXX=/usr/vacpp/bin/xlC_r 3. Edit Makefile: LINKFORSHARED= -Wl,-bE:Modules/python.exp -lld -Wl,-brtl 4. make CC=/usr/vac/bin/xlc_r CXX=/usr/vacpp/bin/xlC_r OPT=-O2 -qmaxmem=4000 5. make install Oddly enough, there was no need to build Python using shared libraries. (#*shared* in Modules/Setup was left commented out and --enable-shared was not used.) The OPT=... is described in Python-2.5.1/Misc/AIX-NOTES. This was on AIX 5.3, xlc_r 9.0, Python 5.2.1, Subversion 1.4.5. It also appears to work using gcc and Python 2.4.4. Thanks to Andy Nocera for figuring it out before 'Plan B: Blood Sacrifice While Doing the Hokey-Pokey' was implemented. * The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA621 -- http://mail.python.org/mailman/listinfo/python-list