开发者

Getting numbers into a column in Python

I have a bunch of numbers that are tab-delimited with new line characters that looks something like this:

104     109     105     110     126     119      97     103\n
114     129     119     130     122     106     117     128\n

and so on. How can I use python to write all these numbers to a file in one column? i.e.

104\n
109\n
105\n
110\n
126\n

and so on. Fairly new to python so开发者_C百科 any help is appreciated, thanks!


The easiest way to do this is probably to use sed. But if you must use Python, you need to replace all tab characters with newlines. Try something like this:

with open('input_file', 'rb') as infile:
    with open('output_file', 'wb') as outfile:
        for line in infile:
            outfile.write(line.replace('\t', '\n'))


"\n".join("104 109 105 110 126 119 97 103\n 114 129 119 130 122 106 117 128\n".split())


There are multiple ways of tackling this problem. You could use string.split and string.join, but that seems inefficient, since you'd be converting a string into a tuple and back into a string.

Using regex, we replace one or more whitespace characters with a newline. The metacharacter \s represents any whitespace character), which in Python 2.7.1 is equivalent to [ \t\n\r\f\v] (and possibly additional whitespace characters, if UNICODE is set).

import re 

input_file = open('input_filename','r')
output_file = open('output_filename', 'w')
for line in input_file:
    output_file.write(re.sub('[\s]+','\n', line))
input_file.close()
output_file.close()


If your file is small, you can use file.readlines() to read all the lines into memory:

with open('input.txt', 'r') as fin:
    for row in [l.split() for l in fin.readlines()]:
        for col in row:
            print col

If the file is very large, read the lines into memory one at a time (I like to use a generator):

for row in open('input.txt'):
    for col in row.split():
        print col

In either case you can pipe the output to a new file:

python myscript.py >output.txt


Replace input_filename and output_filename with appropriate values.

f = open('input_filename','r')
nums = f.read().split()
f.close()
f = open('output_filename', 'w')
f.write('\n'.join(nums))
f.close()

[Edit] Reworked example that doesn't load the whole file into memory. It is now very similar to Chinmay Kanchi's example. But I use split where he uses replace.

with open('input_filename','r') as input:
    with open('output_filename', 'w') as output:
        for line in input:
            output.write('\n'.join(line.split()))
            output.write('\n')
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜