• 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 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.
Welchen Editor oder welches IDE benutzt Du denn? Benutzt Du überhaupt Linux oder nicht eher Windows?

Es geht nicht in erster Linie darum, ein Programm zum Laufen zu bringen, sondern darum, daß Du den Code verstehst. Daher Hausaufgabe: Poste mal bitte meinen (letzten) Code-Vorschlag mit Kommentaren, was da abläuft. Z.B.:
Code:
minlist = [] # Es wird eine leere Liste "minlist" erzeugt.
usw. Nur so kann man sehen, wieviel Du begreifst.

Weißt Du, was "tail" ist/macht ("man tail" unter Linux)?

Und am Ende wieder die Frage: Meintest Du das so wie in meinem letzten Codevorschlag oder anders?

Gruß
 
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

import os # OS IMPORTIEREN

fname = "/home/scenicamd64/Dokumente/Daten/Zahlen.txt" # ZUGRIFF AUF DATEI
minnr = 6 # SPALTE 6
maxnr = 7 # SPALTE 7
sep = "," # TRENNUNGSZEICHEN ZWISCHEN DEN ZAHLEN

minlist = [] # MINLISTE ERSTELLEN
maxlist = [] # MAXLISTE ERSTELLEN

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

fh = os.popen("tail -n 1000 " + fname) # :???: ICH DENKE LETZTE 1000 ZEILEN EINLES.
a = fh.readlines() # :???: ZEILEN EINLESEN
fh.close() # DATEI SCHLIESSEN

for i in a: # INTEGER AUS VARIABLE A
i = i.rstrip(os.linesep) # :???:
b = i.split(sep) # :???:
minlist.append(int(b[minnr])) # DATEN IN MINLISTE ANHÄNGEN
maxlist.append(int(b[maxnr])) # DATEN IN MAXLISTE ANHÄNGEN

x = 0 # VARIABLE X IST 0
while True: # WENN WAHR
c = "Bitte geben sie eine Zahl für die " # ZAHL FÜR VARIABLE C EINGEBEN
if x % 2: # WENN X GERADE
c += "Minimum" # MINIMUMZAHL AN VARIABLE C ANHÄNGEN
else: # ODER
c += "Maximum" # MAXZAHL AN VARIABLE C ANHÄNGEN
c += "-Liste oder 'q' ein: " # ZAHL ODER Q EINGEBEN
z = raw_input(c) # EINGABE FÜR Z
if z == "q": # WENN EINGABE Q
break # ABBRUCH
if z.isdigit(): # :???:
if x % 2: # WENN X GERADE
minlist.append(int(z)) # AN MINLISTE Z ANHÄNGEN
else: # ANSONSTEN
maxlist.append(int(z)) # AN MAXLISTE Z ANHÄNGEN
else: # ANSONSTEN
print 'Eingabefehler' # AUSGABE EINGABEFEHLER
x += 1 # WERT DAZURECHNEN

print 'Minimum Minimumliste: ' + str(min(minlist)) # AUSGABE VON MIN IN MINLISTE
print 'Maximum Minimumliste: ' + str(max(minlist)) # AUSGABE VON MAX IN MINLISTE
print # LEERZEILE
print 'Minimum Maximumliste: ' + str(min(maxlist)) # AUSGABE VON MIN IN MAXLISTE
print 'Maximum Maximumliste: ' + str(max(maxlist)) # AUSGABE VON MAX IN MAXLISTE

DANKE FÜR DIE UNTERSTÜTZUNG

Gruß
 
easyman schrieb:
fh = os.popen("tail -n 1000 " + fname) # :???: ICH DENKE LETZTE 1000 ZEILEN EINLES.
a = fh.readlines() # :???: ZEILEN EINLESEN
fh.close() # DATEI SCHLIESSEN

for i in a: # INTEGER AUS VARIABLE A

Code:
tail -n 1000 "/home/scenicamd64/Dokumente/Daten/Zahlen.txt"
gibt unter Linux die letzten 1000 Zeilen Deiner Datei aus.
os.popen(...) öffnet eine Pipe zu diesem Kommando und lädt die Zeilen so in Dein Skript: Rückgabewert von os.popen() ist ein File-Handle (hier genannt "fh") (siehe "pydoc os.popen").
Code:
a = fh.readlines()
liest aus diesem Filehandle die Daten, und zwar als Liste.
Code:
for i in a:
Hier ist i kein Integer, sondern jeweils ein Element von "a" in der Schleife, hier also ein String mit einer Zeile Deiner Datei.
Code:
print type(i)
würde Dir das auch ausgeben ("str").

Soweit erstmal.

Gruß
 
Oft muß man die Probleme auch in mehrere teilen.
Versuch doch erstmal:
Code:
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-
import os
fh = file("/home/scenicamd64/Dokumente/Daten/Zahlen.txt", "r")
a = fh.readlines()
fh.close()
for i in a:
    print i
Das sollte klappen ...

Gruß
 
Hallo
in nochmal jede einzelne Zeile durchgegangen :???:
Bei den einzelnen Zeilen werden keine Fehler angezeigt, aber sobald ich das ganze Skript laufen lasse,
bekomme ich folgende Fehlermeldung:
Traceback (most recent call last):
File "/home/scenicamd64/Dokumente/Python/TESTING.py", line 22, in <module>
for zeile in datei:
NameError: name 'datei' is not defined

Habe dann versucht mit "for zeile in fname" umzuändern, und keine Fehlermeldung, Bildschirm bleibt leer, bis ich ENTER drücke, dann heißt es Eingabefehler!

Gruß
 
Die Fehlermeldung passt nicht zu deinem zuletzt angegebenen Quellcode. Bitte poste das aktuelle Script (wobei der Traceback eindeutig auf den Fehler hinweist :) ).


}-Tux-{
 
Hallo,

Hier habe ich ein Skript, welches sehr gut Funktioniert.

Code:
# -*- coding: utf-8 -*-
class intlist(object):
    def __init__(self):
        self.ende=False
        self.liste=[]
    def getint(self,name='/home/scenicamd64/Dokumente/Daten/15Min.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()

Eine letzte Frage ist, wie man die Eingegebenen Zahlen in der Liste speichert!

Dann wär ich euch sehr dankbar!

Gruss
 
Code:
a = ("a", "b", "c")
fh = file("out.txt", "w")
for i in a:
    fh.write(i + "\n")
fh.close()
Funktionieren ist in Python nicht alles: Der Code soll so sauber und einfach wie möglich sein, damit er später durch einen selbst oder einen anderen möglichst schnell gewartet werden kann.
Aber das ist Dir mit Deinem unsinnigen "intlist"-Objekt ja wohl egal.
 
Hallo,

vielleicht ist mir zurzeit nur wichtig dass es funktioniert egal wie, vielleicht ist meine Denkweise falsch, weil ich noch am lernen bin!
Wenn ich später mehr Erfahrung habe, würde ich die Skripts sehr gerne selber verbessern!

Derzeit habe ich das Problem, die Richtige Reihenfolge der Codezeilen einzuhalten deshalb ist mir die Funktionsweise des Skripts auch sehr wichtig !

Finde ich hierfür ein Leitfaden ?

Gruss
 
Oben