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

Discussion in 'Python' started by homepricemaps@gmail.com, Dec 31, 2005.

  1. Guest

    if i use the code below to write a list to a file

    list = (food, price, store)
    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

    and i want it to do

    apple, .49. star market

    any ideas
     
    , Dec 31, 2005
    #1
    1. Advertising

  2. limodou Guest

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

    30 Dec 2005 20:22:52 -0800, <>:
    > if i use the code below to write a list to a file
    >
    > list = (food, price, store)
    > 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
    >
    > and i want it to do
    >
    > apple, .49. star market
    >
    > any ideas
    >


    my box is windows xp, so :

    >>> print repr(os.linesep)

    '\r\n'

    If you want to seperate them with space, you should:

    f.write ( ''.join( list ) )

    and list = (food, price, store)
    the list is not called "list", but "tuple", a real list should be

    aList = [food, price, store]
    --
    I like python!
    My Blog: http://www.donews.net/limodou
    NewEdit Maillist: http://groups.google.com/group/NewEdit
     
    limodou, Dec 31, 2005
    #2
    1. Advertising

  3. Guest

    i want them to be on the same line when they are written to the file.
    right now they are written like this:

    food
    price
    store

    i want them to be written like this

    food price store

    how do i do that?
     
    , Dec 31, 2005
    #3
  4. limodou Guest

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

    30 Dec 2005 20:44:29 -0800, <>:
    > i want them to be on the same line when they are written to the file.
    > right now they are written like this:
    >
    > food
    > price
    > store
    >
    > i want them to be written like this
    >
    > food price store
    >
    > how do i do that?
    >


    >>> print ' '.join(['food', 'price', 'store'])


    os.linesep represents newline.


    --
    I like python!
    My Blog: http://www.donews.net/limodou
    NewEdit Maillist: http://groups.google.com/group/NewEdit
     
    limodou, Dec 31, 2005
    #4
  5. 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.
     
    Steven D'Aprano, Dec 31, 2005
    #5
  6. Guest

    never mind i figured out what you were saying,. worked like a
    charm!!!!!

    thanks for your help.

    yaffa
     
    , Dec 31, 2005
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    0
    Views:
    329
  2. Mr. SweatyFinger
    Replies:
    2
    Views:
    2,071
    Smokey Grindel
    Dec 2, 2006
  3. scad
    Replies:
    23
    Views:
    1,191
    Alf P. Steinbach
    May 17, 2009
  4. Michael Brooks
    Replies:
    22
    Views:
    427
    Rick DeNatale
    Mar 27, 2007
  5. Raj Singh
    Replies:
    4
    Views:
    146
    Ryan Ingram
    Jan 29, 2008
Loading...

Share This Page