SOWS
SOWS

Reputation: 1

Transforming a text file into column vectors

I have a text file that I would like to break up into column vectors:

dtstamp ozone   ozone_8hr_avg   

06/18/2015 14:00:00 0.071   0.059   

06/18/2015 13:00:00 0.071   0.053   

How do I produce output in the following format?

dtstamp = [06/18/2015 14:00:00, 06/18/2015]

ozone = [0.071, 0.071]

etc.

Upvotes: 0

Views: 530

Answers (4)

Vishal Anand
Vishal Anand

Reputation: 474

Few of the other answers seem to give errors on running them.

Try this, it should work like a charm!

dtstmp = []
ozone = []
ozone_8hr_avg = []
with open('file.txt', 'r') as file:
  next(file)
  for line in file:
    if (line=="\n")  or (not line):     #If a blank line occurs
      continue
    words = line.split()                #Extract the words
    dtstmp.append(' '.join(words[0::1]))#join the date
    ozone.append(words[2])              #Add ozone
    ozone_8hr_avg.append(words[3])  #Add the third entry

print "dtstmp =", dtstmp
print "ozone =", ozone
print "ozone_8hr_avg =", ozone_8hr_avg

Upvotes: 1

Adolfo Correa
Adolfo Correa

Reputation: 823

Try this my friend:

# -*- coding: utf8 -*-
file = open("./file.txt")

lines = file.readlines()

data = []
data_hour = []
ozone = []
ozone_8hr_avg = []

for i_line in lines:
    data.append(i_line.split()[0:2])
    data_hour.append(' '.join(data[-1]))
    ozone.append(i_line.split()[2])
    ozone_8hr_avg.append(i_line.split()[3])

#print (data)
print (data_hour)
print (ozone)
print (ozone_8hr_avg)

If that helps you remember accept the answer.

Upvotes: 0

Christopher Ian  Stern
Christopher Ian Stern

Reputation: 1412

I would check out pandashttp://pandas.pydata.org or the csv module. With cvs you'll have to make the columns yourself, since it will give you rows.

rows = [row for row in csv.reader(file,  delimiter='\t') ] #get the rows
col0 = [ row[0] for row in rows ] # construct a colonm from element 0 of each row.

Upvotes: 0

TigerhawkT3
TigerhawkT3

Reputation: 49310

import datetime

dtstamp = [] # initialize the dtstamp list
ozone = [] # initialize the ozone list

with open('file.txt', 'r') as f:
    next(f) # skip the title line
    for line in f: # iterate through the file
        if not line: continue # skip blank lines
        day, time, value, _ = line.split() # split up the line
        dtstamp.append(datetime.datetime.strptime(' '.join((date, time)),
          '%m/%d/%Y %H:%M:%S') # add a date
        ozone.append(float(value)) # add a value

You can then combine these lists with zip to work with corresponding dates/values:

for date, value in zip(dtstamp, ozone):
    print(date, value) # just an example

Upvotes: 1

Related Questions