nach einiger Recherche und Leserei habe ich nun ein Skript, das Messdaten verschiedener Proben einliest und am Ende in einer Datei speichert. Dazu werden Dateien eines bestimmten Typs bzw. Namens bis zur zweiten Verzeichnisebene eingelesen, geöffnet und dann als pandas.DataFrame abgespeichert. Das funktioniert auch wunderbar. Allerdings habe ich den Eindruck, dass das Skript mit zunehmender Laufzeit langsamer wird und wenn ich so in den Taskmanager schaue, scheint die Festplatte viel mit dem Lesen unnötiger Dateien beschäftigt zu sein.
Hätte da vielleicht jemand einen Tipp, worauf ich schauen könnte? Ich habe schon gelesen, dass pandas effizienter ist, wenn man die Daten erst in einer list bzw. dict einliest und erst am Ende gesammelt in einen DataFrame schreibt.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
import os
import pandas as pd
cwd = os.getcwd()
data_csv = 'daten.csv'
tier = 0
for _, dirs, files in os.walk(cwd):
tier += 1
if tier == 1:
break
reads = 0
for dir in dirs:
for file in os.listdir(os.path.realpath(dir)):
if 'EIC' in file or 'BPC' in file:
print('Ordner ' + dir[0:2] + ': ' + file[9:] + ' (Datei ' + str(reads) + ')')
chromatogram = dir[:2] + file[22:31]
sample = 'sample ' + dir[:2]
sample_id = dir[-7:-2]
data = {'time': [], sample: [], chromatogram: []}
with open(dir + os.sep + file) as _file:
for line in _file:
time, cps = line.split()
if reads < 1:
data['time'].append(float(time)/60)
data[sample].append(int(sample_id))
data[chromatogram].append(int(cps))
else:
data[sample].append(int(sample_id))
data[chromatogram].append(int(cps))
if reads < 1:
df = pd.DataFrame()
df['time'] = pd.Series(data['time'][:2680])
df[sample] = pd.Series(data[sample][:2680])
df[chromatogram] = pd.Series(data[chromatogram][:2680])
else:
df = pd.read_csv(data_csv)
df[sample] = pd.Series(data[sample][:2680])
df[chromatogram] = pd.Series(data[chromatogram][:2680])
df.to_csv(data_csv, index = False)
reads += 1
print(reads)