Hiddenguy
Hiddenguy

Reputation: 537

Saving specific data from many files

I have a folder where a store files from my fitting model in .txt format.

My question here is how to write a loop which will take e.g p1_cen 7.65782003 from this file and append it to a column in a .csv file? The other thing with my question is that number of those files is equal to 288, because I store 5 minute long data from each day. And a loop what I need is to take from those 288 files a specifit data e.g like above, do You have any ideas how to do this?

For now, I have this code, which writes data in .txt files from my lmfit model.

  with open('S:\Doc\Python\Results\DecompositionBx ' + "{0}".format(Station) + "{0}{1}".format(Start_time_hours_format, Start_time_minutes_format) + ".txt", 'w') as fh:
        fh.write(result.fit_report(show_correl=False))

Btw. my files are named accordingly

DecompositionBxHylaty0000
...
DecompositionBxHylaty2355

UPDATE!!!

So the code from @bobrobbob works:

import csv
from datetime import timedelta

data = []

for i in range(288):
    skip = i*timedelta(minutes=5)
    hours, minutes, _ = str(skip).split(':')
    filename = "S:\Dok\Python\Results\DecompositionBx Hylaty%02d%02d.txt" % (int(hours), int(minutes))
    with open(filename) as f:
        lines = f.readlines()
    for line in lines:
        if line.startswith('    p1_cen'):
            data.append(line.split('+')[0])
            break

with open('S:\Dok\Python\Results\data.csv', 'w') as f:
    writer = csv.writer(f)
    for line in data:
        writer.writerow(line)

I get something like this, which is nearly perfect:

enter image description here

Upvotes: 1

Views: 56

Answers (1)

bobrobbob
bobrobbob

Reputation: 1281

a bit ugly on the time handling, maybe someone will come with a cleaner solution. but it should work nonetheless

import csv
from datetime import timedelta

data = []

for i in range(288):
    skip = i*timedelta(minutes=5)
    hours, minutes, _ = str(skip).split(':')
    filename = "DecompositionBxHylaty%02d%02d" % (int(hours), int(minutes))
    with open(filename) as f:
        lines = f.readlines()
    for line in lines:
        if line.startswith('p1_cen'):
            data.append(line.split('+')[0].strip())
            break

with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f, delimiter=' ')
    for line in data:
        writer.writerow(line.split())

Upvotes: 1

Related Questions