[Tutor] really dumb questions

alan.gauld@bt.com alan.gauld@bt.com
Sun, 10 Feb 2002 23:29:18 -0000

Just back from a week vacation so jumping in late...

> > I know that there is writelines, but as usual i can't 
> figure out based on the Python documentation which hardly 
> ever gives illustrative examples.

Thats why Beasleys book is good - it adds the examples ;-)

> >>> scooby_file=open("scooby.txt","w")
> >>> scooby_file.writelines(["Scooby","Dooby","Doo"])
> >>> scooby_file.close()
> Yields the file scooby.txt with the following data in it:
> ScoobyDoobyDoo

And if you want it on separate lines just add a '\n' to 
each item:

f.writelines(map(lambda s: s+'\n', ["Scooby", "Dooby", "Doo"]))

Or do it more explicitly in a loop:

for line in ["Scooby", "Dooby", "Doo"]:
    line = line + '\n'

That's all writelines() does internally, (without the \n malarky)
its nothing magic, just a handy shortcut to a common operation...

> > My other dumb question is this: how do i print a list 
> without the leading and trailing brackets and commas? 

> for item in [1,2,3]:
>     print item,           #don't miss that comma on the end, 

But he asked for f.write not print so...

s = ''
for item in [1,2,3]:
    s = s+str(item) # just convert to a string and concatenate
f.write(s)          # then write the final string

> add the `x` thing it works but it adds single quotes to the 
> output. How do you suppress those?

You don't need to. The interpreter adds those to show that 
its a string. If you assign the result to a striong then 
write the string it should work just fine:

> 'x' thing? You've lost me there.

Its the backtick technique for converting to a string.

> current_time=time.time()
> time_file.write(str(current_time))

Yep, just like that... Do you see a trend yet?

> ...the first element of sys.argv should give you 
> what you want. ie.:
> import sys
> program_name=sys.argv[0]

And you could use the os.path functions to prepend 
the current directory if desired.

prog_path = os.path.join(os.getcwd(),sys.argv[0])

Note: that's not tested but something very similar 
should work!

Alan g.