Python Daten vergleich mit verschachtelte For Schleifen

Sylar

Commander
Registriert
März 2011
Beiträge
2.870
Hallo!

Hab grad ein verständniss Problem und hänge etwas. Also ich bekomme übers web bestimmte Daten rein (RSS) und diese Speichere ich ins newnotif rein.

Dann hab ich auf den PC noch eine txt Datei und diese lese ich in fobj ein.

Jetzt möchte ich aber Zeile für Zeile es durchgehen und bei gleichen werten (sind texte, aber jede neue zeile = neuer text). es auf false setzen.

Erst wenn A != B ist, dann soll er auf true setzen und immer die letzte Zeile von der Textdatei löschen und abspeichern.

Code:
import serial, sys, feedparser, time, datetime


FACEBOOK="https://www.facebook.com/feeds/notifications.php"
SERIALPORT = "COM7"
filename = "facebook.txt"
fobj = open(filename,"a+");
list = map(lambda s: s.strip(), fobj.readlines())

LOOPS=2

# Set up serial port
#try:
#	ser = serial.Serial(SERIALPORT, 9600)
#	print "Serial connected"
#	time.sleep(3.0)
#except serial.SerialException:
#	print "no device connected - exiting"
#	sys.exit()

for i in range(1, LOOPS):
        newmails = feedparser.parse(FACEBOOK)

for i in range(1, 5):
   print newmails['items'][i-1].title
   newnotif = newmails['items'][i-1].title

   #for mail in newnotif:
    #    if mail in list:
     #           fobj.write(newnotif+"\n")

   for mail in newnotif:
           print mail
           zuordnung = mail.split(";");
           if mail not in list:

                   fobj.writelines(newnotif+";\n");

# Output data to serial port
"""
if newmails > 0:
	ser.write(1)
	print "new notification"
else:
	ser.write(0)
	print "no notification"
print data to terminal


 Close serial port
ser.close()
"""

Aktueller Fehler: "TypeError: 'file' object is not callable"

Jemand einen Rat/Idee wie man sowas machen kann?
 
Zuletzt bearbeitet:
@
JA ! mit FreeCommander. Ist wesendlich einfacher und funktioniert auch.
 
Hi,
ich bin mir teilweise unsicher wie du deine Frage gemeint hast aber hier mal meine vorläufige Lösung:
Code:
fobj = open('d.txt', 'a+')
list = map(lambda s: s.strip(), fobj.readlines())
for mail in newnotif:
    if mail not in list:
        fobj.write("\n"+mail)
fobj.close()
Dies setzt allerdings voraus, dass alle deine neuen Daten, die du über RSS reinbekommst, bereits in einer Liste "newnotif" sind. Falls dem nicht so ist, sollte das jedoch kein allzu großes Hexenwerk sein ;).

MfG
 
@DerKleine49
Wie meinst mit FreeCommander? Und was genau ist der FreeCommander? Python Editor oder wie?

@Ben90
Hmm..leider schreibt er mir die Daten mehrfach raus..

alsozb
aaaaa
aaaaa
aaaaa
bbbbb
bbbbb
bbbbb

anstatt nur aaaa, bbbb, cccc

wie füge ich die Daten von einer Textdatei in eine Liste ein? Kenne mich leider mit Python nicht so gut aus.
 
okay dann erklär mir bitte noch mal genau deine ursprüngliche Frage und dein Problem, evtl mit deinem aktuellen kompletten Codeschnipsel (vllt mit Kommentaren neben den Zeilen), weil wir sonst aneinander "vorbeiprogrammieren" befürchte ich =).
 
habs oben den Code eingefügt.

Also mein vorhaben nochmals:

Ich möchte über Facebook Daten reinlesen und das geht soweit bei mir.
Nun möchte ich aber diese Daten in eine txt Datei abspeichern, damit ich den aktuelle Stand der Daten weiß.
Bei einem weiteren aufruf soll Python die Datei einlesen und von Facebook die Daten lesen und Python soll danach die Daten vergleichen und bei neuerungen, dann ein True bzw. 1 ausgeben, damit ich es weiterleiten kann.
 
probier mal das:
Code:
import feedparser

FACEBOOK="https://www.facebook.com/feeds/notifications.php"
filename = "facebook.txt"
fobj = open(filename,"a+");
list = map(lambda s: s.strip(), fobj.readlines())

newmails = feedparser.parse(FACEBOOK)

for i in range(1, 5):
    print newmails['items'][i-1].title
    newnotif = newmails['items'][i-1].title
    if newnotif not in list:                    # Check, ob der Eintrag bereits existiert
        fobj.writelines(newnotif+"\n");

ich hab jetzt mal den Teil mit dem serial und das Auskommentierte weggelassen. Habe obigen Code eben bei mir getestet und funktioniert.

MfG
 
danke, ich glaub das klappt auch so bei mir. muss noch warten bis was passiert^^, aber sieht gut aus
Ergänzung ()

Hallo!

Es funktioniert...fast perfekt!

Code:
import serial, sys, feedparser, time, datetime
#Settings - Change these to match your account details
valX=0;

FACEBOOK="https://www.facebook.com/feeds/notifications.php?"
SERIALPORT = "COM3" # Change this to your serial port!
filename = "facebook.txt"
fobj = open(filename,"a+");
list = map(lambda s: s.strip(), fobj.readlines())

LOOPS=2

# Set up serial port
try:
	ser = serial.Serial(SERIALPORT, 9600)
	print "Serial connected"
	time.sleep(3.0)
except serial.SerialException:
	print "no device connected - exiting"
	sys.exit()

for i in range(1, LOOPS):
        newmails = feedparser.parse(FACEBOOK);

for i in range(1, 5):
   #print newmails['items'][i-1].title
   newnotif = newmails['items'][i-1].title

   if newnotif not in list:
        fobj.writelines(newnotif+"\n");
        print newnotif;
        newmawils = 1;
else:
        newmails = 0;
# Output data to serial port
if newmails > 0:
	ser.write(1)
	print "new notification"
else:
	ser.write(0)
	print "no notification"

#Close serial port
ser.close()


Was leider noch nicht so gut funktioniert ist, dass er mir irgendwie nicht mit der Serial Schnittstelle kommunziert...werd weiterhin es probieren, aber der Python Code ist zumindest mal richtig..
 
Zurück
Oben