• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Python 2.7 Skript Problem

easyman

Newbie
Hallo
leider bin ich wieder am Verzweifeln!

Dass mit der Liste einfügen hat Perfekt geklappt!
Das Problem ist, ich möchte danach noch weitere Zahlen in dir Listen anhängen, und diese dauerhaft in der Liste speichern!

Code:
minwerte, maxwerte = [], []
datei = open("/home/scenicamd64/Dokumente/Daten/Zahlen.txt", "r")
 
for zeile in datei:
    zeile = zeile.rstrip(" ")
    werte = zeile.split(",")
    neue_werte = []
    for wert in werte:
 
        neue_werte.append(wert)
 
    minwerte.append(werte[6])
    maxwerte.append(werte[7])
 
    minwerte.append(min(minwerte))
    maxwerte.append(max(maxwerte))
 
datei.close()
print(minwerte)
print(maxwerte)

Code:
# -*- coding: utf-8 -*-
class intlist(object):
    def __init__(self):
        self.ende=False
        self.liste=[]
    def getint(self,name='/home/scenicamd64/Dokumente/Daten/Zahlen.txt'):
        while True:
            print 'Bitte geben sie eine Zahl ein fuer',
            print name,
            print ':',
            zahl=raw_input()
            # Ende der Listeneingabe =
            if zahl=='q':
                self.ende=True
                break # ja, tschuess
            # ist es ein Integer ?
            try:
                i=int(zahl)
            except: # nein, Fehler
                print 'Eingabefehler'
                continue
            # ja, Integer an die Liste anhängen
            self.liste.append(i)
            break
    def min(self):
        return min(self.liste)
    def max(self):
        return max(self.liste) 
 
# Start !!
 
# erzeuge ein Listenobjekt
minlist=intlist()
# gib Werte ein, bis ein 'q' kommt
while not minlist.ende:
    minlist.getint('Minliste')
# gib die Liste aus
print
print minlist.liste
print 'Min:',minlist.min()
print 'Max:',minlist.max()

Wie füge ich die beiden Teile zusammen!
Derzeit bin ich noch etwas am experimentieren =:)
Ich hoffe ihr habt Verständnis
Besten Dank
Gruss
 

abgdf

Guru
Die Crossposter werden immer dreister:

http://www.easy-coding.de/skripts-zusammenstellen-t8302.html

Warum liest Du nicht "A Byte of Python" (ist sogar auf Deutsch) und lernst Python richtig?

Woher soll ich wissen, was Du damit erreichen willst, wenn Du die beiden Skriptteile zusammenfrickelst?
 
OP
E

easyman

Newbie
Die Crossposter werden immer dreister:
:schockiert: Habe schon mehrere PDF's, Anleitungen, WIKIPedia oder sonstiges gelesen :???: Irgendwie fehlt mir der Zusammenhang, oder das Logische denken, keine Ahnung!

Zeigt man mir aber etwas, kann ich wiederum auf andere Skripts übertragen, und das Verständnis ist besser!
:???: :???: :???: :???: :???: :???: :???: :???: :???: :???: :???: :???: :???: :???: :???: :???: :???:
 

abgdf

Guru
Woher soll ich wissen, was Du damit erreichen willst, wenn Du die beiden Skriptteile zusammenfrickelst?
 

abgdf

Guru
Dein Code ist supergruselig: "datei" ist keine Liste, sondern ein File-Handle, "print" ist in 2.7 keine Funktion, wenn Du reine Integer haben willst, kannst Du auch mit ".isdigit()" prüfen, ein "intlist"-Objekt brauchst Du überhaupt nicht. Guckstu:
Code:
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

l = []
while True:
    z = raw_input("Bitte geben sie eine Zahl oder 'q' ein: ")
    if z == "q":
        break
    if z.isdigit():
        l.append(int(z))
    else:
        print 'Eingabefehler'

print 'Min: ' + str(min(l))
print 'Max: ' + str(max(l))
Beschreib' doch mal allgemein (ohne Code), was Du überhaupt machen willst.
 
OP
E

easyman

Newbie
Hallo,

Dein Code ist supergruselig: "datei" ist keine Liste, sondern ein File-Handle, "print" ist in 2.7 keine Funktion, wenn Du reine Integer haben willst, kannst Du auch mit ".isdigit()" prüfen, ein "intlist"-Objekt brauchst Du überhaupt nicht. Guckstu:

Danke für die Verbesserung!

Folgende Idee:
Ich habe eine TXT-Datei, die mehrere 1000er Zeilen hat!
Zu viele Daten für "OpenOffice", da es zu unübersichtlich ist. Deshalb die Idee in Python 2.7!

Es werden die Spalten MAX und MIN aus der TXT-Datei, in die Max- und Min-Python-Listen importiert.
Am besten wär's aus Speicherproblemen, dass nur die letzten 1000 Elemente importiert werden.

Diese Elemente aus der Max[] und Min[] sollen gespeichert werden, und danach werden die nächsten Elemente, nach dem Min und Max abgefragt.

Es sollen danach das Minimum und das Maximum aus der Max[] angezeigt werden.
Und das Minimum und das Maximum aus der Min[] angezeigt werden.

Gruss
 

Wizzzard

Member
Wozu willst Du die vorher gelesenen Werte 'Speichern' bzw. merken? Du brauchst Dir doch nur zu merken, was der bisher letzte maximale und minimale Wert ist.

Warum hängst Du denn das Maximum bzw. Minimum nochmal an die Listen selbst an? Wozu soll das gut sein? Das führt nur dazu, dass der entsprechende Wert gleich mindestens 2 mal in der jeweiligen Liste ist, da Du das gleich für jede gelesene Zeile machst. Das hat mit den vorherigen Spalten in der Datei überhaupt nichts mehr zu tun.

Entweder die Werte komplett in den Listen abspeichern und nachdem lesen auf den Listen min() und max() anwenden und getrennt in eigenen Variablen ablegen, oder beim Einlesen den jeweiligen bisherigen Extremwert mit dem neu gelesenen vergleichen und davon das neue Extremum merken.

Ersteres wäre das hier:
Code:
minwerte, maxwerte = [], []
datei = open("/home/scenicamd64/Dokumente/Daten/Zahlen.txt", "r")

for zeile in datei:
    zeile = zeile.rstrip(" ")
    werte = zeile.split(",")

    try:
        minwerte.append(int(werte[6]))
    except:
        pass

    try:       
        maxwerte.append(int(werte[7]))
    except:
        pass

minimum = min(minwerte)
maximum = max(maxwerte))

datei.close()
print "Minimum: %d" % minimum
print "Maximum: %d" % maximum
 
OP
E

easyman

Newbie
Warum hängst Du denn das Maximum bzw. Minimum nochmal an die Listen selbst an? Wozu soll das gut sein?

Ich Importiere eine Liste, sagen wir mal, von Anfang des JAHRES BIS HEUTE.
Dass was ich manuel eingeben möchte. sollen fortlaufende Zahlen sein.

Dadurch hätte ich die Max(), Min() Ergebnisse der letzten Woche, des Monats, des Jahres.....
Es soll eine Schleife werden die Elemente miteinander vergleicht .

Danke für eure Zeit.
Gruss
 

Wizzzard

Member
Wie, manuelle Eingabe? In Deiner ausführlicheren Beschreibung war davon keine Rede.

Hast Du dir vorher irgendwo mal aufgeschrieben was Du erreichen möchtest, also die Anforderungen definiert? Das sieht mir sehr unklar aus.
 
OP
E

easyman

Newbie
Hallo

Manuelle Eingabe habe ich in der Beschreibung beschrieben.....

Wenn es so problematisch ist, so würde mir auch nur reichen, wenn ich manuell die Zahlen eingebe, und diese sollen in der Liste dauerhaft gespeichert werden!

Gruss
 

abgdf

Guru
Meinst Du das so?
Code:
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

import os

fname = "/home/scenicamd64/Dokumente/Daten/Zahlen.txt"
minnr = 6
maxnr = 7
sep = ","

minlist = []
maxlist = []

# Nur die letzten 1000 Zeilen (schneller Hack, hab' keinen Bock, 'tail' neu zu schreiben):

fh = os.popen("tail -n 1000 " + fname)
a = fh.readlines()
fh.close()

for i in a:
    i = i.rstrip(os.linesep)
    b = i.split(sep)
    minlist.append(int(b[minnr]))
    maxlist.append(int(b[maxnr]))

x = 0
while True:
    c = "Bitte geben sie eine Zahl für die "
    if x % 2:
        c += "Minimum"
    else:
        c += "Maximum"
    c += "-Liste oder 'q' ein: "
    z = raw_input(c)
    if z == "q":
        break
    if z.isdigit():
        if x % 2:
            minlist.append(int(z))
        else:
            maxlist.append(int(z))
    else:
        print 'Eingabefehler'
    x += 1

print 'Minimum Minimumliste: ' + str(min(minlist))
print 'Maximum Minimumliste: ' + str(max(minlist))
print
print 'Minimum Maximumliste: ' + str(min(maxlist))
print 'Maximum Maximumliste: ' + str(max(maxlist))
 

framp

Moderator
Teammitglied
framp schrieb:
abgdf schrieb:
...Beschreib' doch mal allgemein (ohne Code), was Du überhaupt machen willst.
So wie mir scheint ist immer noch nicht klar was Du willst. Ich versteh z.B. dass Du täglich, wöchentlich, monatlich usw den min/max finden willst.

Ob das richtig ist weiss ich nicht - ich will Dir nur zeigen dass Du schon GENAU beschreiben musst was Du benötigst :roll:
 

abgdf

Guru
easyman schrieb:
Das Skript von alias "abgdf" Fehlermeldung:
Traceback (most recent call last):
File "/home/scenicamd64/Dokumente/Python/Programm.PY", line 23, in <module>
minlist.append(int(b[minnr]))
ValueError: invalid literal for int() with base 10:
Aha, das soll wohl heißen, "Dein Programm ist fehlerhaft, bitte leiste Support".
Nun bist Du aber selbst Programmierer. Daher: Bitte Skript selbst verstehen (vor allem prüfen, welchen Wert b zum Zeitpunkt des Fehlers einnimmt und warum) und debuggen.

Gruß
 
OP
E

easyman

Newbie
Hallo nochmal,

wie debugge ich ?
Wo finde ich ein debuging-Programm ?

Dieses Modul ist in Python 2.7 integriert, oder ?

Danke
 

abgdf

Guru
easyman schrieb:
wie debugge ich ?
Du schreibst in den Code vor die Stelle, an der das Programm mit Fehler abbricht, "print"-Anweisungen, die Dir die Werte der "verdächtigen" Variablen angeben.
Dann versuchst Du mit Hilfe der Fehlermeldung zu verstehen, was da schiefläuft und schreibst es so um, daß es läuft.
easyman schrieb:
Wo finde ich ein debuging-Programm ?
Braucht man in Python nicht. Braucht man mehr in kompilierten Sprachen, die keine Fehlermeldungen zur Laufzeit ausgeben (z.B. "gdb" für C).

Gruß
 
OP
E

easyman

Newbie
Hallo

wenn der Sktript ausgeführt wird, habe ich nur eine weisse Fläche, es erscheinen auch keine Daten, oder Listen,
erst, wenn ich ein Enter drücke, erscheint die Fehlermeldung, dass keine Datei geleden werden konnte.

Die Datei TXT existiert aber!

Wenn ich die Zahlen in der Liste Speichern möchte, heisst es dann DUMP.LIST oder müseen die Listen in eine andere Datei gespeichert werden ?

Danke
Gruss
 

}-Tux-{

Hacker
Um ehrlich zu sein, blicke ich hier irgendwie nicht richtig durch...

easyman schrieb:
wenn der Sktript ausgeführt wird, habe ich nur eine weisse Fläche, es erscheinen auch keine Daten, oder Listen,
erst, wenn ich ein Enter drücke, erscheint die Fehlermeldung, dass keine Datei geleden werden konnte.
Wie sieht dein Script denn zurzeit aus? Wie lautet die genaue Fehlermeldung?

easyman schrieb:
Wenn ich die Zahlen in der Liste Speichern möchte, heisst es dann DUMP.LIST oder müseen die Listen in eine andere Datei gespeichert werden ?
Was meinst du damit genau?


}-Tux-{
 
Oben