Re: [Tutor] unit testing raw_input()
Suppose I had a function like the following: # def y_n(prompt=Answer yes or no): while True: answer = raw_input(prompt) if answer in ['y', 'Y', 'yes']: print You said yes! break elif answer in ['n', 'N', 'no']: print You said no! break else: print %s is an invalid answer.%answer How could I go about to write an automated test for it? Create a data file with all of the inputs you need and use input redirection to run it. Assuming its called y_n.py: $ python y_n.py y_n.in y_n.out This is the easiest way of testing interactive programs. This has limitations for unit testing if you have more than one function per module however, in that case you need to write a driver module that imports yours and takes as a first input the function you want to test... In Python the driver can sit inside the if __name__ == __main__ stanza Alan G ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Tutor Digest, Vol 26, Issue 62
Quoting [EMAIL PROTECTED]: Send Tutor mailing list submissions to tutor@python.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.python.org/mailman/listinfo/tutor or, via email, send a message with subject or body 'help' to [EMAIL PROTECTED] You can reach the person managing the list at [EMAIL PROTECTED] When replying, please edit your Subject line so it is more specific than Re: Contents of Tutor digest... Today's Topics: 1. Help Entry !!! (Cesar Garcia) 2. creating a tab delim file (Srinivas Iyyer) 3. Re: Olle-Olla (Kent Johnson) 4. Re: Tutorial on bitwise Python? (Alan Gauld) 5. Re: creating a tab delim file (Karl Pfl?sterer) 6. Version of a .pyc file (Don Taylor) 7. unit testing raw_input() (Andre Roberge) 8. Re: Version of a .pyc file (Terry Carroll) 9. Re: unit testing raw_input() (Michael) 10. Re: unit testing raw_input() (Danny Yoo) -- Message: 1 Date: Tue, 18 Apr 2006 11:14:03 -0700 (PDT) From: Cesar Garcia [EMAIL PROTECTED] Subject: [Tutor] Help Entry !!! To: tutor@python.org Message-ID: [EMAIL PROTECTED] Content-Type: text/plain; charset=iso-8859-1 Hi !!! Friends, i nedd process Data Entry in python Example Entry = 20 Result = 20*10 This Result in Windows (Tkinter) How do you do Think !!! Regards Cesar Exmaple from Tkinter import * class MyDialog: def __init__(self, parent): top = self.top = Toplevel(parent) Label(top, text=Valor).pack() self.e = Entry(top) self.e.pack(padx=5) b = Button(top, text=OK, command=self.ok) b.pack(pady=5) def ok(self): print value is, self.e.get() self.top.destroy() root = Tk() root.update() d = MyDialog(root) root.wait_window(d.top) - New Yahoo! Messenger with Voice. Call regular phones from your PC and save big. -- next part -- An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/tutor/attachments/20060418/0bb19d34/attachment-0001.htm -- Message: 2 Date: Tue, 18 Apr 2006 11:53:58 -0700 (PDT) From: Srinivas Iyyer [EMAIL PROTECTED] Subject: [Tutor] creating a tab delim file To: tutor@python.org Message-ID: [EMAIL PROTECTED] Content-Type: text/plain; charset=iso-8859-1 Hi group, I asked similar questions in the past. I am unable to get to the crux of this problem so that I can solve on my own. apologies for my ignorance. The problem: I have 50 tab delim files. Each file has 500 rows and 50 columns. I have to read the first column of each file. Repeat the same for 50 files and write a tab delim text file containing 500 rows and 50 columns. code that works through half of the problem: import glob files = glob.glob('*.proc') for each in files: f = open(each,'r') da = f.read().split('\n') dat = da[:-1] for m in dat: mycol = m.split('\t')[0] .. From here I am blanked out. Although I can extract the first column from each file:I have no idea how to store each list. thought 1. Create an empty string and join each by a tab. ## mycol = '' for m in dat: mycol = m.split('\t')[0] mstr = '\t'.join(mycol) how can i append the data from second file to that string. could tutors help me with this situation. Thanks srini __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com -- Message: 3 Date: Tue, 18 Apr 2006 14:59:38 -0400 From: Kent Johnson [EMAIL PROTECTED] Subject: Re: [Tutor] Olle-Olla To: Python Tutor tutor@python.org Message-ID: [EMAIL PROTECTED] Content-Type: text/plain; charset=UTF-8; format=flowed Andre Engels wrote: 2006/4/18, Kent Johnson [EMAIL PROTECTED]: J?nos Juh?sz wrote: Hi All, Is it possible to replace the print statement with one of mine function ? In reality, I would like to replace the print in my PyCrust app with the log.write() function. Best: Use a good editor to change your print statements to log.write() Even better: Use a good editor to change your print statements to myprint() and then def myprint() to be log.write(). This has the advantage that if (for example) you want prints later to be usually log.write() but if redFlagHighestWarning is True, then both log.write() and print(), you don't need to go through all this again, but just have to change myprint(). Or use the logging module, which lets you make changes like this by editing a config file. I usually set it up so that INFO level and higher messages go to a console or GUI panel, and all messages go to a rollover file. Very handy. Kent
Re: [Tutor] pyexpat
2006/4/18, Danny Yoo [EMAIL PROTECTED]: H Can you send a link to the text that's causing performance issues? It might be possible that someone here might isolate the performance problem. (Hey, it happened before with BeautifulSoup... *grin*) I have sent the text (and another text that did not cause problems) to Danny; sending it to this list was disallowed because of length (about 1.5M for the 'slow' case and about half of that for the 'fast' one). -- Andre Engels, [EMAIL PROTECTED] ICQ: 6260644 -- Skype: a_engels ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] pyexpat
On Wed, 19 Apr 2006, Andre Engels wrote: 2006/4/18, Danny Yoo [EMAIL PROTECTED]: H Can you send a link to the text that's causing performance issues? It might be possible that someone here might isolate the performance problem. (Hey, it happened before with BeautifulSoup... *grin*) I have sent the text (and another text that did not cause problems) to Danny; sending it to this list was disallowed because of length (about 1.5M for the 'slow' case and about half of that for the 'fast' one). Can you provide a web link somewhere? That will help solve the distribution problem by turning it from a push to a pull. ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] net ettiquette and sentence sorting/homework
* i want to write a function which will sort the sentence by the length of each word in the sentece, short length first.please help. Hi Nywbon, First: please do not reply to the whole email digest. The point of a reply is to continue a previous conversation. Please be aware that not everyone has high-speed internet access: quoting the whole archive actually can strain some people's network bandwidth, if not their good humor and patience. Since you are starting a new question, start a new email to create a new thread of conversation. Second (and related to the first): please use a useful subject line. It helps when people try to learn from the mailing list archives at: http://mail.python.org/pipermail/tutor/ Finally, to get back to your question: i want to write a function which will sort the sentence by the length of each word in the sentece, short length first.please help. This looks very much like a homework question. We can not help you much with this. The only thing we can really do is try to guide you indirectly. Here are a few things you can do: 1. Write some concrete test examples of the problem statement and what you'd like to get out of it. 2. Show us some of the code that you've written so far, so we can at least point out areas of improvement. For point one, let's take a totally different problem and demonstrate. Let's say we wanted to write a function to turn a number from 0-9 to a string of the Esperanto rendition. If we wanted to write example cases, we'd imagine what calling this function for interesting inputs would look like. For example: translate(0) -- nul translate(1) -- unu translate(2) -- du ... translate(9) -- nau I use the arrow notation '--' as an ad-hoc way of saying I expect to get this value on the right hand side if everything is going well with my function. Can you write examples of your own for your problem? ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] OOPs Concept
Hi All I wanted to understand about OOPs Concept in Python in a easy way, Please explain me with an example I have been reading http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm but at the moment still the concept is not clear Thanks in Advance Regards Kaushal ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Re-instantiate within __init__
Jan Eden wrote: Hi, is it correct that an object cannot be re-instantiated within it's __init__ method? I tried: class Omega: def Display(self): print self class Alpha(Omega): def __init__(self): self = Beta() class Beta(Omega): def __init__(self): pass objectus = Alpha() objectus.Display() which prints __main__.Alpha instance at 0x54d50 Binding to self in a method just changes the local value of self, it doesn't change the object itself. The only thing special about 'self' is the way it is bound before the method is entered; inside the method it is a local name like any other. To bind objectus to a new object you have to assign to objectus. But I suspect you are really looking for a way to change the behaviour of the object bound to objectus. Background: I need to create a new object upon instantiation when a database query returns no records. The rest of the program should just use the new object. Is there any way to achieve this? I can always place the equivalent of 'self = Beta()' in the Display() function: def Display(self): if self.not_found: self = Beta() self.Display() return print self but this does not look very elegant. I don't understand what you are trying to do, but here are some ideas: - have Display() look at self.not_found itself, or pass self.not_found as a parameter to display. - use a factory method to create a class of the correct type - change self.Display to be the correct function - you can change the class of an object at runtime by assigning to its __class__ attribute. This may be what you are looking for but I suspect there is a simpler, less magic solution - I'm not sure why classes are needed at all here. Can you give a more complete example of what you are trying to do? Even if your code above worked the way you want it to, it wouldn't do anything interesting, since Alpha and Beta have exactly the same attributes and behaviour. Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] OOPs Concept
Even though I am still new to python, I've recently had an insight as to what makes OOP different from procedural programming. Let's take perl for example. A variable in perl is like a bowl. It's an empty vessel you can put things in. You can change the contents of the bowl, you can empty the bowl but it doesn't really *do* anything. It has no real attributes aside from the fact that it's a container. So when I create a variable in perl it looks like this: $x = 'hello' If I want to make the first letter of the value of $x a capital letter, I have to use a function to do it: $y = ucfirst($x) now $y contains the value 'Hello' In python one doesn't really create variables, one creates objects. Sring objects, list objects, etc. And objects are cool because they can do things. They are more than just merely bowls, they are like swiss army knives. So in python, if I say: x = 'hello' Then I can do all sorts of things with x: x.capitalize() - 'Hello' x.swapcase() - 'HELLO' x.count('l') - 2 This is just a very small example but I hope that my example can help you understand what objects are what makes OOP different from procedural programming. -mtw On Wed, Apr 19, 2006 at 06:07:27PM +0530, Kaushal Shriyan ([EMAIL PROTECTED]) wrote: Hi All I wanted to understand about OOPs Concept in Python in a easy way, Please explain me with an example I have been reading http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm but at the moment still the concept is not clear Thanks in Advance Regards Kaushal ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor -- Matthew White - District Systems Administrator Tigard/Tualatin School District 503.431.4128 The greatest thing in this world is not so much where we are, but in what direction we are moving. -Oliver Wendell Holmes ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] OOPs Concept
On 4/19/06, Matthew White [EMAIL PROTECTED] wrote: Even though I am still new to python, I've recently had an insight as to what makes OOP different from procedural programming. Let's take perl for example. A variable in perl is like a bowl. It's an empty vessel you can put things in. You can change the contents of the bowl, you can empty the bowl but it doesn't really *do* anything. It has no real attributes aside from the fact that it's a container. So when I create a variable in perl it looks like this: $x = 'hello' If I want to make the first letter of the value of $x a capital letter, I have to use a function to do it: $y = ucfirst($x) now $y contains the value 'Hello' In python one doesn't really create variables, one creates objects. Sring objects, list objects, etc. And objects are cool because they can do things. They are more than just merely bowls, they are like swiss army knives. So in python, if I say: x = 'hello' Then I can do all sorts of things with x: x.capitalize() - 'Hello' x.swapcase() - 'HELLO' x.count('l') - 2 This is just a very small example but I hope that my example can help you understand what objects are what makes OOP different from procedural programming. -mtw On Wed, Apr 19, 2006 at 06:07:27PM +0530, Kaushal Shriyan ([EMAIL PROTECTED]) wrote: Hi All I wanted to understand about OOPs Concept in Python in a easy way, Please explain me with an example I have been reading http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm but at the moment still the concept is not clear Thanks in Advance Regards Kaushal ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor -- Matthew White - District Systems Administrator Tigard/Tualatin School District 503.431.4128 The greatest thing in this world is not so much where we are, but in what direction we are moving. -Oliver Wendell Holmes Thanks Matthew Just wanted to know x.count('l') - 2 Here 2 means what I didnot understood this and also does x is a object and capitalize(), swapcase() and count('l') are methods, is that correct what i understand Awaiting your earnest reply Regards Kaushal ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] Some help with properties and accessor functions....
class SOFileIndexRecord(object): def __init__(self, so): self._so=so def _get_code(self): return self._so.code def _set_code(self, value): self._so.code=value testCode=property(_get_code, _set_code) # What does this do? def _get_fileName(self): return self._so.fileName def _set_fileName(self, value): self._so.fileName=value fileName=property(_get_fileName, _set_fileName) # What does this do? I am playing with SQLobject, and I managed to cobble together some code for it based on information in the FAQ but I am not understanding entirely what I am doingcan someone help? I don't really understand what setting properties does and how I access the defined get/set functions in this object. Any info would be wonderful, thanks in advance!--Mark ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] [Summary] Re: unit testing raw_input()
Thank you Michael, Danny and Alan for your suggestions. I've included below my summary of the three very different suggestions, my brief analysis of them, and my conclusion. Anyone is free and welcome to comment! On 4/18/06, Andre Roberge [EMAIL PROTECTED] wrote: Hi all- Suppose I had a function like the following: def y_n(prompt=Answer yes or no): while True: answer = raw_input(prompt) if answer in ['y', 'Y', 'yes']: print You said yes! break elif answer in ['n', 'N', 'no']: print You said no! break else: print %s is an invalid answer.%answer How could I go about to write an automated test for it? André Alan Gauld suggested to create a data file that simulate possible user responses and to use redirection to feed the data to the program. Assuming the function to be tested is in y_n.py, it would look like the following: $ python y_n.py fake_user_data test_result Then, I assume I would do an automated comparison between test_result and some expected_result file to ensure everything is ok. This, in my opinion, is the cleanest solution. However, it may not scale well if one wants to build a test suite with many functions/methods, some of which require some user-input. Ideally, one should be able to change the order in which unit tests are run; with this approach, both the test suite and the user data file would probably have to be change in sync. Danny Yoo suggested to change the function to be tested, to include an extra parameter, i.e. go from def y_n(prompt=Answer yes or no): to def y_n(prompt=Answer yes or no, raw_input=raw_input): To quote Danny: But now we can hardcode particular inputs by sending y_n() a mock raw_input that returns precooked values. ### def yes1_raw_input(prompt): return y def yes2_raw_input(prompt): return Y def yes3_raw_input(prompt): return yes def yes4_raw_input(prompt): return YES ### [end quote] My first reaction is Neat! :-). However, this is only usable if one has access to the original function. If one uses a library function like y_n() (for example, there is a similar function in the livewires module which some of you probably know) which is not, in principle, modifyable, this approach fails. Michael (last name unknown) suggests another approach, which shares some similarities with Danny's. Here's Michael's edited/truncated explanation: You create a mock for raw_input, put the above code inside a module and rebind raw_input in the module before calling your function. ie: (CONTENTS of y_n.py) def y_n(prompt=Answer yes or no): while True: answer = raw_input(prompt) if answer in ['y', 'Y', 'yes']: print You said yes! break [snip] (END CONTENTS of y_n.py) [Michael's explanation using the interpreter is modified below] Then, one can have a test function in a separate file --- begin test function import y_n def raw_input_mock(prompt): # create a mock return n y_n.raw_input = raw_input_mock # rebind the name inside the module y_n.y_n() # Run, this now calls our mock instead of the real raw_input --- end test function [end of quote] Note that y_n() should probably return a string (instead of using a print statement) so that the output can be compared with the expected result; otherwise, one has to redirect the output to a file and do a comparison, as I mentioned with Alan's explanation. This is a rather clever method; I would never have thought of rebinding y_n.raw_input in this way. The only weakness that I see with this approach is if one wants to test a function like y_n() knowing that it ask the user for some input ... but not knowing what function it uses to do so. This can be the case if one has a compiled library with only the interface (what values can be passed to the functions and how; what are the expected outputs) being known. Danny's approach would also not work here, whereas Alan's would. As it is, I will be working on a very small project with another programmer, where I will be responsible to write some unit tests. I have access to the source code (so I know which function is used to get input from the user), but I do not want the other programmer to have to change the way his code is written simply to accommodate my tests. The other programmer's code will be in a single module; similarly, I want to write a single test module myself - without having to worry about keeping a separate data file. Therefore, I will go with Michael's approach. Thanks to everyone, and I hope that I didn't misrepresent any of the three solutions proposed. It's been fun! André ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Re-instantiate within __init__
is it correct that an object cannot be re-instantiated within it's __init__ method? There are some tricks you can pull but the object is actually instantiated before the init gets called. Really init is for initialisation of the instance, it's not a true constructor. Background: I need to create a new object upon instantiation when a database query returns no records. I'd probably create a factory function to do this that returns the appropriate type of instance. def makeDbResponseInstance(queryStatus): if queryStatus: return DBClass() else: return Emptyclass() If the two classes are subclassed from a common ancestor you might put the factory into the class as a class method, but I'd probably just keep it as a function. That keeps the two class's definitions clean and decoupled from the instantiation decision which isn't really their responsibility - children don't choose to be born!. Alan G. ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Some help with properties and accessor functions....
class SOFileIndexRecord(object): def __init__(self, so): self._so=so def _get_code(self): return self._so.code def _set_code(self, value): self._so.code=value testCode=property(_get_code, _set_code) # What does this do? It says that testCode is a property of SOFileIndexRecord A property looks like a data attribute from the user of the class's point of view but internallty it is accessed via the get/set methods. Thus I can do: s = SOFileIndexRecord(mySo): s.testCode = myCode # actually does s._setCode(myCode) print s.testCode# actually s._getCode() properties allow for creation of read only attributes in Python by having a null set method.(Of course you can still cheat and use the 'hidden' methods, or even the real data attributes. Buit if everyone behaves properly it can help a wee bit. HTH, Alan G Author of the learn to program web tutor http://www.freenetpages.co.uk/hp/alan.gauld ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] GUI
Ok, If I can get it for free, I might as well go with say wxPython. Thanks Yes, free as in beer, as in speech, and cross platform. Oh, and better documented. Hugo ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] [Linux] open a file in any home ~ ?
Hello, I want to read a configuration file from a small python app (user preferences). The .myapp.conf is in the home folder of the user. if I do: f=open(/home/user1/.myapp.conf,r) #it works obviously I won't know the home user folder name then I wanted to use: f=open(~/.myapp.conf,r) # but it returns a IOError: [Errno 2] No such file or directory: How can I do to access this file whatever the user is ? Thanks for your help. --- ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] [Linux] open a file in any home ~ ?
os.getenv('HOME') will return the user's home directory as long as that environment variable is set. you can also use the pwd module: pwd.getpwnam('mtw') ('mtw', 'x', 1000, 1000, ',,,', '/home/mtw', '/bin/bash') -mtw On Wed, Apr 19, 2006 at 07:55:14PM +0200, learner404 ([EMAIL PROTECTED]) wrote: Hello, I want to read a configuration file from a small python app (user preferences). The .myapp.conf is in the home folder of the user. if I do: f=open(/home/user1/.myapp.conf,r) #it works obviously I won't know the home user folder name then I wanted to use: f=open(~/.myapp.conf,r) # but it returns a IOError: [Errno 2] No such file or directory: How can I do to access this file whatever the user is ? Thanks for your help. --- ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor -- Matthew White - District Systems Administrator Tigard/Tualatin School District 503.431.4128 The greatest thing in this world is not so much where we are, but in what direction we are moving. -Oliver Wendell Holmes ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] [Linux] open a file in any home ~ ?
f=open(~/.myapp.conf,r) # but it returns a IOError: [Errno 2] No such file or directory: How can I do to access this file whatever the user is ? use os.path.expanduser(path) http://www.python.org/doc/2.4.3/lib/module-os.path.html hope this helps! -- wesley - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Core Python Programming, Prentice Hall, (c)2007,2001 http://corepython.com wesley.j.chun :: wescpy-at-gmail.com python training and technical consulting cyberweb.consulting : silicon valley, ca http://cyberwebconsulting.com ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Re-instantiate within __init__
I tried: class Omega: def Display(self): print self class Alpha(Omega): def __init__(self): self = Beta() class Beta(Omega): def __init__(self): pass objectus = Alpha() objectus.Display() which prints __main__.Alpha instance at 0x54d50 Background: I need to create a new object upon instantiation when a database query returns no records. The rest of the program should just use the new object. I think you're looking for the Strategy design pattern: your class has a default behavior, but in a certain case, you want it to switch behaviors to something else. http://www.exciton.cs.rice.edu/JavaResources/DesignPatterns/StrategyPattern.htm That is, rather than Alpha being a subclass of Omega, Alpha can have an instance of Omega: # class Alpha: def __init__(self): self.strategy = DefaultStrategy() def display(self): self.strategy.display() class DefaultStrategy: def display(self): print I am the default strategy # The advantage here is that the strategy can be swapped out just by setting self.strategy to something else. ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] [Linux] open a file in any home ~ ?
It works great, thanks very much to the three of you for these light-speed answers ... I love this list ! Wesley, I've just pre-order your new edition Core Python programming on amazon France, it looks great. :) Thanks On 19/04/06, w chun [EMAIL PROTECTED] wrote: f=open(~/.myapp.conf,r)# but it returns a IOError: [Errno 2] No such file or directory:How can I do to access this file whatever the user is ?use os.path.expanduser (path)http://www.python.org/doc/2.4.3/lib/module-os.path.htmlhope this helps!-- wesley- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Core Python Programming, Prentice Hall, (c)2007,2001http://corepython.comwesley.j.chun :: wescpy-at-gmail.com python training and technical consultingcyberweb.consulting : silicon valley, cahttp://cyberwebconsulting.com ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] [Linux] open a file in any home ~ ?
Hi, You can use expanduser() from os.path for this: import os.path homedir = os.path.expanduser('~user1') file_to_open = os.path.join(homedir, '.myapp.conf') f = open(file_to_open, 'r') Regards, -Markus- Quoting learner404 [EMAIL PROTECTED]: Hello, I want to read a configuration file from a small python app (user preferences). The .myapp.conf is in the home folder of the user. if I do: f=open(/home/user1/.myapp.conf,r) #it works obviously I won't know the home user folder name then I wanted to use: f=open(~/.myapp.conf,r) # but it returns a IOError: [Errno 2] No such file or directory: How can I do to access this file whatever the user is ? Thanks for your help. --- ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] [Linux] open a file in any home ~ ?
The .myapp.conf is in the home folder of the user. ... obviously I won't know the home user folder name then I wanted to use: How can I do to access this file whatever the user is ? You can get the user name using getpass.getuser() as described in the OS topic of my tutor under the Securiity heading. You can also try using os.getenv() or the os.environ variable to look up the HOME environment variable, also discussed in the OS topic. HTH, Alan G Author of the learn to program web tutor http://www.freenetpages.co.uk/hp/alan.gauld ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] [Linux] open a file in any home ~ ?
we are all happy to help. it is really good that you were able to get it working so fast! also, if you want to do any kind of pattern matching with * or ?, then check out the glob module. merci! le livre does not look that good from here... it is a mess and i have to clean it up before giving it to the publisher! :-) cheers, -wesley On 4/19/06, learner404 [EMAIL PROTECTED] wrote: It works great, thanks very much to the three of you for these light-speed answers ... I love this list ! Wesley, I've just pre-order your new edition Core Python programming on amazon France, it looks great. :) ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] GUI
If I can get it for free, I might as well go with say wxPython. Thanks Yes, free as in beer, as in speech, and cross platform. Oh, and better documented. Sadly, you still pay for it in RAM usage :^) Alan ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] GUI
Hmm? How so? I'm using a whole lot of raw wxPython mixed with Pythoncard for a project, and the entire process sits at 7Mb RAM usage idle. WinXP btw. Considering my small command line appns to start/stop Windows services written in C use just over 1Mb, 7Mb isn't overly bad. The other good thing about wxPython is stuff like Pythoncard and Wax, although development on Pythoncard seems to have slowed right down, Kevin Altis got busy, I guess; Wax is nice looking but... not very well documented... It's great being able to use Pythoncard for the not overly complicated stuff, but with the wxPython still lurking beneath the surface. Regards, Liam Clarke On 4/20/06, R. Alan Monroe [EMAIL PROTECTED] wrote: If I can get it for free, I might as well go with say wxPython. Thanks Yes, free as in beer, as in speech, and cross platform. Oh, and better documented. Sadly, you still pay for it in RAM usage :^) Alan ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] Brain In Vice: Why is this so fun to me?
I think I'm going to have to suck it up and learn some regular expressions. I have finally gotten my script (using the excellent pyserial module) to behave. Most of my troubles as enumerated here before were utterly self-induced. Apparently one cannot watch the execution of one's script through another program without affecting it's outcome in unforseen ways. (Sound familiar Herr Schroedinger? :-) Now that I am actually extracting data in a fairly predictable way, I am at the point where I need to parse it! I have some output here (modified to show the ESC and NUL characters.) When I pull data from the port, the remote computer sends it in one long string per screen: newlines are not painted in by using the expected x\0a that I had hoped for! No easy readlines() fun for me. Instead I get: ESC=( 1. ESC=($4x2, 6-239 (3.9L) ..ESC=(a03252 ESC=(k0 ESC=) 2. ESC=))8-318 (5.2L) ..ESC=)a03242 ESC=)k0 ESC=* 3. ESC=*)8-360 (5.9L) ..ESC=*a03351 ESC=*k 0 ESC=+ 4. ESC=+$4x4, 6-239 (3.9L) ..ESC=+a03240 ESC=+k 0 ESC=, 5. ESC=,)8-318 (5.2L) ..ESC=,a03243 ESC=,k 0 ESC=- 6. ESC=-)8-360 (5.9L) ..ESC=-a03352 ESC=-k 0 ESC=. 7. ESC=.aCH8299 ESCTNULESC)NULESC=% LINEESCTNULESC= R = RELIST return = NONE I have broken it up for ease of viewing. I need to split the string where ESC= , k and 0 are found, but ESC= ,k and 0 are seperated by various spaces, parentheis and other characters that are apparently used to mark the end of the line until the next ESC is found, thereby displaying a new line (note how the character after the first ESC on each line is repeated after the ESC on the end. I cannot for the life of me figure out a pythonic way (read: using the split() builtin) to scan for instances of these characters in such and such order and proximity. I know this is what regex is for, but I have no experience. I have obtained a copy of Mastering Regular Expressions but thought I would inquire here first for caveats and tips as the book is larger than my brain, and I haven't used the re module, ever. Why in the world does this make me so happy? :-)~ ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Brain In Vice: Why is this so fun to me?
Hi Doug, Best tip ever is your_python_dir\tools\scripts\redemo.py Interactive regexes. :) This is pretty good as well - http://www.amk.ca/python/howto/regex/ Good luck, Liam Clarke On 4/20/06, doug shawhan [EMAIL PROTECTED] wrote: I think I'm going to have to suck it up and learn some regular expressions. I have finally gotten my script (using the excellent pyserial module) to behave. Most of my troubles as enumerated here before were utterly self-induced. Apparently one cannot watch the execution of one's script through another program without affecting it's outcome in unforseen ways. (Sound familiar Herr Schroedinger? :-) Now that I am actually extracting data in a fairly predictable way, I am at the point where I need to parse it! I have some output here (modified to show the ESC and NUL characters.) When I pull data from the port, the remote computer sends it in one long string per screen: newlines are not painted in by using the expected x\0a that I had hoped for! No easy readlines() fun for me. Instead I get: ESC=( 1. ESC=($4x2, 6-239 (3.9L) ..ESC=(a03252 ESC=(k0 ESC=) 2. ESC=))8-318 (5.2L) ..ESC=)a03242 ESC=)k0 ESC=* 3. ESC=*)8-360 (5.9L) ..ESC=*a03351 ESC=*k0 ESC=+ 4. ESC=+$4x4, 6-239 (3.9L) ..ESC=+a03240 ESC=+k0 ESC=, 5. ESC=,)8-318 (5.2L) ..ESC=,a03243 ESC=,k0 ESC=- 6. ESC=-)8-360 (5.9L) ..ESC=-a03352 ESC=-k0 ESC=. 7. ESC=.aCH8299 ESCTNULESC)NULESC=% LINEESCTNULESC= R = RELIST return = NONE I have broken it up for ease of viewing. I need to split the string where ESC= , k and 0 are found, but ESC= ,k and 0 are seperated by various spaces, parentheis and other characters that are apparently used to mark the end of the line until the next ESC is found, thereby displaying a new line (note how the character after the first ESC on each line is repeated after the ESC on the end. I cannot for the life of me figure out a pythonic way (read: using the split() builtin) to scan for instances of these characters in such and such order and proximity. I know this is what regex is for, but I have no experience. I have obtained a copy of Mastering Regular Expressions but thought I would inquire here first for caveats and tips as the book is larger than my brain, and I haven't used the re module, ever. Why in the world does this make me so happy? :-)~ ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] Reqiest Centre - Adding New Call
Hi, The categories of calls under this drop down box, are they going to increase anytime soon, or shall I go with what's there? Regards, Liam Clarke ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] [Linux] open a file in any home ~ ?
How can I do to access this file whatever the user is ? use os.path.expanduser(path) Neat Wesley, I've never noticed that one before. Alan G. ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Brain In Vice: Why is this so fun to me?
I cannot for the life of me figure out a pythonic way (read: using the split() builtin) to scan for instances of these characters in such and such order and proximity. I know this is what regex is for, I'm afraid so, it looks like the time has come to import re. I have obtained a copy of Mastering Regular Expressions Good book but probably overkill unless you get really serious I would inquire here first for caveats and tips Build them up gradually, test them at the prompt or using the tool that comes with Python. Don;t forget the power of building a negative of what you want and then searching for the inverse. Finally remember that match() is usually the wrong function to use - it only searches at the beginning of the string! And, of course, I have a topic on regex :-) Good luck! Alan G Author of the learn to program web tutor http://www.freenetpages.co.uk/hp/alan.gauld ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] Splitting a number into even- and odd- numbered digits
Greetings: I am writing a function that accepts a string of decimal digits, calculates a checksum and returns it as a single character string. The first step in the calculation is to split the input into two strings: the even- and odd- numbered digits, respectively. The least significant digit is defined as odd. The following code fragment does the job but seems sort of brutish and inelegant to me: s = '987654321' odd = '' for c in s[::-2]: ... odd = c + odd ... s = s[:-1] even = '' for c in s[::-2]: ... even = c + even ... odd '97531' even '8642' Is there a better (i.e. more Pythonic) way to do this? Thanks in advance for all your help. Regards, Barry [EMAIL PROTECTED] 541-302-1107 We who cut mere stones must always be envisioning cathedrals. -Quarry worker's creed ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Splitting a number into even- and odd- numbered digits
On 20/04/06, Carroll, Barry [EMAIL PROTECTED] wrote: The following code fragment does the job but seems sort of brutish and inelegant to me: s = '987654321' odd = '' for c in s[::-2]: ... odd = c + odd ... String slicing will actually produce strings :-) eg: s = '987654321' s1, s2 = s[::-2], s[-2::-2] s1 '13579' s2 '2468' -- John. ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Version of a .pyc file
Terry Carroll wrote: How can I tell if a .pyc file was built with 2.3 or 2.4? There's a Magic Number in the first 2 or 4 bytes, (depending on whether you consider the \r\n part of the MN). f = open(pycfile.pyc, rb) magictable = {'\x3b\xf2\r\n': 2.3, '\x6d\xf2\r\n' : 2.4} magic = f.read(4) release = magictable.get(magic,unknown) print Python release:, release Python release: 2.4 I have used Terry's code to write a script to find all of the the .pyc files on my system that were compiled with the 2.3 version of the compiler, and I have removed these files. But my underlying problem still occurs: somewhere somebody is calling for the 2.3 version of the Python vm .dll and not finding it. This is happening under Pydev/Eclipse and my only recourse is to blow Eclipse away using Task Manager. So maybe I have a .pyd file somewhere that is a 2.3 extension. Is there a way to examine .pyd files to see if they were built for Python 2.3? Finally, are there any other possible file extension types that I should be looking at? Thanks, Don. ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Version of a .pyc file
Don Taylor wrote: Finally, are there any other possible file extension types that I should be looking at? .pyo is like a .pyc but compiled with optimizations on. Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Reqiest Centre - Adding New Call
Hi all, I do apologise for this, This was an email that has nothing to do with Python or the tutor list, so my apologies to all. Somehow I managed to send it to the wrong recepient. (And my thanks to Bob for being brave enough to attempt to answer what would be a hopelessly vague question. :-) ) Regards, an embarrassed Liam Clarke On 4/20/06, Bob Gailer [EMAIL PROTECTED] wrote: Liam Clarke wrote: Hi, The categories of calls under this drop down box, are they going to increase anytime soon, or shall I go with what's there? I'm in the dark. What is this drop down box? ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor