Gary
Gary

Reputation: 3

Retain formatting

Im using a function to return a text file that is tab delimited and read in, the format of the text file is:

1_0 NP_250397 100.00 140 0 0 1 140 1 140 6e-54 198

1_0 NP_250378 60.00 140 0 0 1 140 1 140 6e-54 198

1_0 NP_257777 70.00 140 0 0 1 140 1 140 6e-54 198

My code used to return is:

def print_file(x):
    h = open('/home/me/data/db/test.blast', 'r')
    return h.readlines()

But when its printed it looks like:

['1_0\tNP_250397\t100.00\t140\t0\t0\t1\t140\t1\t140\t6e-54\t 198\n', '1_0\tNP_250397\t100.00\t140\t0\t0\t1\t140\t1\t140\t6e-54\t 198\n', '1_0\tNP_250397\t100.00\t140\t0\t0\t1\t140\t1\t140\t6e-54\t 198\n']

Is there a way of returning the file, while aslo retaining formatting?

Upvotes: 0

Views: 140

Answers (3)

Mark Ransom
Mark Ransom

Reputation: 308402

When you print out a list, Python prints the list in a kind of raw format that represents how it's stored internally. If you want to eliminate the brackets and commas and quotes and want the tabs expanded, you must print out each string individually.

for line in print_file(x):
    print line

And could you please pick a more appropriate name for print_file, since it isn't really printing anything? It's adding a bit of cognitive dissonance that isn't helping your problem.

Upvotes: 0

John La Rooy
John La Rooy

Reputation: 304355

If you want print_file to actually print the file as the function name suggests

def print_file(x):
    with open('/home/me/data/db/test.blast', 'r') as h:
        for line in h:
            print line

If you want to return the contents of the file as a single string

def print_file(x):
    with open('/home/me/data/db/test.blast', 'r') as h:
        return h.read()

If your Python is too old to use the with statement

def print_file(x):
    return open('/home/me/data/db/test.blast', 'r').read()

Aside: You may be interested to know that the csv module can work with tab delimited files too

Upvotes: 2

Alex Martelli
Alex Martelli

Reputation: 882133

return h.read() would return the file's contents as a single string, and therefore "retain formatting" if that's printed, as you put it. What other constraints do you have on the return value of the peculiarly-named print_file (peculiarly indeed because it doesn't print anything!)...?

Upvotes: 0

Related Questions