Bearbeiten und darstellen von txt-files

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Hallo und Grüße ich habe ein Problem und zwar habe ich bis jetzt folgenden code:

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

import re
import numpy as np
import matplotlib.pyplot as plt
import glob 
import os.path



begin_file = open('Neuer_Ordner\Anfang_Messungen.txt','r')
for line in begin_file:
    begin_wert = line.split()
    
    
    
    
#==============================================================================
files = glob.glob("*.txt")
#print(files)
for j in range(len(files)):    
    datei = files[j]
    in_file = open(datei)
         
    text = in_file.read()

    s=re.findall(r'.*p9.*$',text,re.MULTILINE)                                    #suchen nach p9 und die spalten danach
    del s[0:2]                                                                     #ersten beiden Zeilen weg wegen beschreibung
    
        #Numpy kann aus einer Liste ein 1D-Array erzeugen.
        #Aus einer Liste von Listen oder einer Liste von 1D-Arrays
        #kann Numpy ein 2D-Array erzeugen.
    x = np.array([np.fromstring(line[3:], sep=" ") for line in s])
#==============================================================================
    
    
    
    fig = plt.figure(num=None, figsize=(12, 10), dpi=80, facecolor='w', edgecolor='k')
    
   
    pltc =  fig.add_subplot(1,1,1)
    
    plt.gca().invert_yaxis()
    tc = plt.plot(x[:,3],x[:,4], "bo-", label='TC')
    plt.grid(True)       
    plt.ylabel(r'[$mm$]',fontsize=20) 
    plt.xlabel(r'[$ W/m/K$]',fontsize=20)
    pltc.xaxis.label.set_color('blue')
    

    pltd = pltc.twiny()
    td  = plt.plot(x[:,6],x[:,4], "ro-",label='TD')
    plt.grid(True)       
        
    plt.xlabel(r'[$m^2/s\cdot 10^{-6}$]',fontsize=20)
    pltd.xaxis.label.set_color('red')
    
    for label in pltc.get_xticklabels():
        label.set_color('b')
        label.set_fontsize('18')
    for label in pltd.get_xticklabels():
        label.set_color('r')
        label.set_fontsize('18')
    for label in pltc.get_yticklabels():
        label.set_fontsize('18')
    
    plt.legend([tc[0], td[0]], ['TC', 'TD'])
    #plt.show()
    
    
    fig.savefig(os.path.splitext(files[j])[0] + '.pdf',
             dpi=300, facecolor='w',
             edgecolor='w', orientation='portrait',
             papertype='letter')    
    
#==============================================================================   

Ich lade alle txt-Datein die mehere Spalten haben ein suche nach "p9" lass mir die zeilen angeben und plotte dann x(:,6) und x(:.3) über x(:,4).
Nun zu meinen Problem. Ich habe jetzt eine weitere txt (Anfang_Messungen) in denen die Anfangspunkte der Messungen steht in etwa so:
Probe_3 50
Probe_4 78
Probe_5 90
Probe_6 66
Probe_7 77
Probe_8 88
Probe_9 89
Probe_10 67
Probe_Tomo 56 u.s.w
Diese txt hat die gleiche länge wie die Eingeladenen files also j.
Ich hätte gern das für j=0 bei x in der vierten Spalte überall (len(x)) 50 dazu addiert wird und für j=1 soll 78 dazu addiert werden u.s.w.
Ich arbeite erst seit kurzen mit matlab und bekomm das nichtzusammen. :K Über hilfe würde ich mich freuen.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ich bin leider gleich AFK, aber zumindest elementare Auffälligkeiten deines Codes muss ich noch gerade kommentieren.
Lienz20013 hat geschrieben:

Code: Alles auswählen

[...]
begin_file = open('Neuer_Ordner\Anfang_Messungen.txt','r')
for line in begin_file:
    begin_wert = line.split()
[...]
Der Code ist schon mal für gar nichts gut und du vergisst zudem, die Datei wieder zu schließen. Verwende das with-Statement, dann wird die Datei am Ende des Blocks automatisch geschlossen.

Code: Alles auswählen

with open('Neuer_Ordner\Anfang_Messungen.txt','r') as begin_file:
    for line in begin_file:
        # do something
Lienz20013 hat geschrieben:

Code: Alles auswählen

[...]
for j in range(len(files)):    
    datei = files[j]
    [...]
Was du hier so schön umständlich formulierst geht viel eleganter, wenn du direkt über files iterierst.

Code: Alles auswählen

for datei in files:
    [...]
Deine Verwendung von range ist in Python ein absolutes Antipattern.
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Danke schön. Aber hat jemand noch ne hilfe für das eigentliche Problem?
BlackJack

@Lienz20013: Mit der `zip()`-Funktion (bzw. `itertools.izip()` in Python 2) kann man über Tupel aus jeweils zusammengehörigen Elementen aus iterierbaren Objekten iterieren.
Antworten