Re: why writing list to file puts each item from list on seperate line?
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

Re: why writing list to file puts each item from list on seperate line?

From: Steven D'Aprano <steve@REMOVETHIScyber.com.au>
Date: Sat Dec 31 2005 - 05:52:30 CET

On Fri, 30 Dec 2005 20:22:52 -0800, homepricemaps wrote:

> if i use the code below to write a list to a file
>
> list = (food, price, store)

Why are you shadowing the built in type list? This is bad practice. Sooner
or later you will do this:

list = [1, 2, 3]
something = process(list)
... lots of code ...
# try to convert to a list
myList = list(something)

and then you'll spend ages trying to work out why list() raises an
exception.

> data.append(list)
> f = open(r"test.txt", 'a')
> f.write ( os.linesep.join( list ) )
>
>
> it outputs to a file like this
>
> apple
> .49
> star market

That's what you told it to do. Walk through the code:

>>> data = []
>>> L = ("apple", "0.49", "market")
>>> data.append(L)
>>> data
[("apple", "0.49", "market")] # a list with one tuple

So far so good. But now watch:

>>> f = open(r"test.txt", 'a')

I hope you aren't opening the file EVERY time you want
to write a single line

>>> f.write(os.linesep.join(L))

Remember what L is: ("apple", "0.49", "market"). You now join that list
(actually a tuple) into a single string: "apple\n0.49\nmarket\n" and write
that string to the file.

What happened to data? It never gets used after you append to it.

> and i want it to do
>
> apple, .49. star market

Then what you want to do is change data to a list of strings rather than
a list of tuples. Before appending to data, you join the tuple ("apple",
"0.49", "market") like so:

data.append(", ".join(L) + "\n") # note newline at the end of each line

Then, after you have appended ALL the lines, you open your file once for
writing, and write data in one go:

f.writelines(data)

Hope this helps.

-- 
Steven.
Received on Tue Jan 3 03:28:30 2006