Showing posts with label time management. Show all posts
Showing posts with label time management. Show all posts

Saturday, May 23, 2009

Writing time data to file

In the last post I wrote about a small command line utility for registering hours spent on different tasks. I never got to showing how to write to text files in Python, so let's get down to it now (what's better to do a Saturday evening than hacking away in Python?)!

First, to open a file for editing, you use the following syntax in Python:

myFile=open('filename.txt','attribute')

where attribute is one of the following:
  • a - append: appends new text to the end of the file
  • w - write: write to file, will overwrite contents already there
  • r - read: does only give read access to the file
For our purpose we will use the append attrribute (a). What you create in this way is a file object, that has certain methods available to it depending on the attribute given to the constructor open. The one we will be using is, surprisingly enough, write:

myFile.write(myString)

When you create a file object, the entire file is loaded into your computers working memory (RAM). When you are done working on the file, you should close it to free memory and avoid unforeseen computer trolls to pop out and eat you. You do this by issueing the close method to your file object;

myFile.close()

If you add the three code lines written here to the script outlined in the last post, you will have a working time registering tool!

Friday, May 22, 2009

Time registering command line tool in Python

Often, I want to write a one-liner to a file to register information. I do my time tracking this way, for example. First, you need Python to get data from the command line. Say you want to track number of hours spent on a project at work and get this into a tab-delimited file that you can open in a spreadsheet later (Excel, Calc, etc). You want a utility where you simply write the following at the command prompt: 

regtime projectname hours

and it should automatically make the following line in your "spreadsheet":

date projectname hours

In order to do this, we need to get the current date in Python. Luckily, there is a nice module called time that allows us to do that in a simple fashion. First, import it as follows: 

from  time import strftime as getdate
currentDate=getdate('%Y-%m-%d')

What this does is that it gets the current local time used on the computer and writes a text string with the date:

currentDate='2009-05-22'

We also need to get the command line arguments projectname and hours into Python.
For this we need the list sys.argv.

from sys import argv as arguments
projectname=argv[1]; hours=argv[2];

Ok, lets summarize with a script that takes the two command line arguments and writes the "spreadsheet" line to the screen:

from sys import argv as cla 
from time import strftime as getDate 
myString = getDate('%Y-%m-%d')+'\t'+cla[1]+'\t'+cla[2]+'\n' 
print myString

The result of running this script with arguments "Command line tool" and 1 is shown below:

2009-05-22      Command line tool       1

Next post will show how to write this at the end of a text file. 

Some comments on the above code:
a) the character \t means "insert tab in text string"
b) the character \n means "insert line break"
c) the string '%Y-%m-%d' formats the date to ISO standard
d) adding string elements works in the obvious way: 'foo'+'bar'='foobar'