0

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

1
  • 1
    Why do you have so many variables? Why out_list and out_accession_list? Why so many variables? Commented Nov 9, 2009 at 21:14

6 Answers 6

4

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)) + "']"
Sign up to request clarification or add additional context in comments.

3 Comments

True, however, I wanted to be verbose to illustrate things better.
Your one-liner doesn't strip the end-of-lines: "['item1\n','item2\n','item3\n']".
You're right, but the example gives enough guidance that the OP should be able to figure it out.
1
out_list = []
for line in open(file_in):
    out_list.append("'" + line + "'")
return "[" + ",".join(out_list) + "]"

2 Comments

Why are you doing all the string building in the append? Just use "','" as your join string.
Yeah, you're right, that'd be better. Soviut has the better answer.
0

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

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

Comments

0

Or

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

Comments

0
def do(filepath):
    out = []
    for line in open(filepath, 'r'):
        out.append("'" + line.strip() + "'")
    return out.__str__()

Comments

0

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']"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.