Few Coding suggestions - resending

Dave Angel davea at davea.name
Sun Jan 11 09:27:23 EST 2015


On 01/11/2015 06:47 AM, Ganesh Pal wrote:
> Hello Team,
>
> Iam trying to generate a file which should have the  contents in the
> below format
>
> # cat  /root/schedule.conf
>
> Sunday 10:20 10:30
> Sunday 10:30 10:40
> Sunday 10:50  10:60
>
>
> I have to build the above format on the local linux machine using
> python 2.7 version and then copy the file to the remote machine.
>
> Here is the progress and few questions on the same ,
>
> Program :
>
> node-1# cat time_range.py
> def yield_times():
>      from datetime import date, time, datetime, timedelta
>      start = datetime.combine(date.today(), time(23, 50))
>      yield start.strftime("%A %H:%M")
>      while True:
>          start += timedelta(minutes=10)
>          yield start.strftime("%A %H:%M")
> gen = yield_times()
> for ii in range(05):
>       print gen.next()
>
> node-1# python time_range.py
> Sunday 23:50
> Monday 00:00
> Monday 00:10
> Monday 00:20
> Monday 00:30
>
> (a)  How do I modify the output to have an another column with a
> difference of 5 mins
>
> Example :
>
> node-1# python time_range.py
>
> Sunday 23:50 23:05
> Monday 00:00 00:05
> Monday 00:10 00:05
> Monday 00:20 00:15
> Monday 00:30 00: 20

No idea how that represents "a difference of 5 minutes".  So I'll take a 
totally wild guess that you meant:

Sunday 23:50 23:55
Monday 00:00 00:05
Monday 00:10 00:15
Monday 00:20 00:25
Monday 00:30 00:35

which would have the 2nd column 5 minutes after the first.

You need another datetime object, let's call it 'end'

end = start + timedelta(minutes=5)

and now you want to yield three things, in a tuple:

yield (start.strftime("%A"), start.strftime("%H:%M"),
    end.strftime("%H:%M"))

Of course that's a pain to do twice, as you have two yields in that 
function.  I'll leave you to reorder the loop to make that unnecessary. 
  Hint, do the yield first, THEN increment the start variable.

and in the other loop, you want
     res = "{} {} {}\n".format(gen.next)
     print res,

>
> (b)  how to copy the above output (i.e with the new column to a file.)
>

Instead of printing, just do f.write(res).  Or do both. Notice that to 
make this easy, i avoided doing any formatting in the print statement. 
I used a trailing comma on it to avoid print adding a newline, and 
instead put it explicitly in the format method call.

>
> (c)  The  final output should be a file , having the entries  day ,
> start , end time of the remote file. how do  i pass the  this to
> yeild-times()
>
> import time
>
> /* Assuming I retrive the below values h,m,d from the remote machine*/
>
> h = time.strftime("%H")
> m = time.strftime("%M")
> d = date.today()
>

Those first two are strings, but the third is a datetime object.  That 
last can be painful to pass between machines.

>
> def yield_times():
>        global h,m,d

No idea what that's all about.  If you want to pass arguments to 
yield_times(), put them inside the parens.

>      from datetime import date, time, datetime, timedelta
>      start = datetime.combine(date.today(), time(int(h),int(m))) /*
> converting string to int)

Got some C code in there?  Use # for comments.

You don't seem to be honoring the 'd' value from the other machine.

>      yield start.strftime("%A %H:%M")
>      while True:
>          start += timedelta(minutes=10)
>          yield start.strftime("%A %H:%M")
> gen = yield_times()
> for ii in range(15):
>       print gen.next()
>
>
> Regards,
> Ganesh
>


-- 
DaveA



More information about the Python-list mailing list