tags:

views:

275

answers:

6

Hi,

I'm trying to read a list of items from a text file and format with square brackets and separators like this: ['item1','item2', .... 'last_item'] but I'm having trouble with the beginning and end item for which I always get: ...,'last_item','], so I do not want the last ,' to be there.

In python I've write:

out_list = "['"
for line in open(file_in):  
 out_list += line                #append the item to the list
 out_accession_list += "','"     #add the separator
out_accession_list += "]"           #add the final closed bracket
return out_list

I realize that this is a basic loop question, but I can't think of the best way to do it. Should I use a try final statement, should it be a while loop, or should I count the number of lines first and then use a loop with a range?

Help much appreciated.

Thanks, John

A: 

You "right strip" for "," the result before adding the last "]".

e.g. use the string.rstrip(",")

jldupont
+4  A: 

Read in all your lines and use the string.join() method to join them together.

lines = open(file_in).readlines()

out_list = "['" + "','".join(lines) + "']"

Additionally, join() can take any sequence, so reading the lines isn't necessary. The above code can be simplified as:

out_list = "['" + "','".join(open(file_in)) + "']"
Soviut
don't even need readlines() -- join takes any sequence
Jimmy
True, however, I wanted to be verbose to illustrate things better.
Soviut
Your one-liner doesn't strip the end-of-lines: `"['item1\n','item2\n','item3\n']"`.
Ned Deily
You're right, but the example gives enough guidance that the OP should be able to figure it out.
Soviut
+1  A: 
out_list = []
for line in open(file_in):
    out_list.append("'" + line + "'")
return "[" + ",".join(out_list) + "]"
Ned Batchelder
Why are you doing all the string building in the append? Just use "','" as your join string.
Soviut
Yeah, you're right, that'd be better. Soviut has the better answer.
Ned Batchelder
A: 

Or

result = "['"
for line in open(file_in):
    if len(result) > 0:
        result += "','" 
    result += line
result += "']"
return result
Jonathan Feinberg
A: 

Your desired output format is exactly Python's standard printable representation of a list. So an easy solution is to read the file, create a list with each line as a string element (stripping the end-of-line of each), and call the Python built-in function repr to produce a string representation of the list:

>>> repr([line.rstrip() for line in open(file_in)])
"['item1', 'item2', 'item3']"
Ned Deily
A: 
def do(filepath):
    out = []
    for line in open(filepath, 'r'):
        out.append("'" + line.strip() + "'")
    return out.__str__()
inspectorG4dget