2017-11-27 7 views
0

Ich habe eine Datei mit Zahlen und Daten, die ich zurück zu Werten von heute vergleichen muss. Das Layout der Datei ist einfach durch Komma getrennt, hier ein Auszug:Vergleichen von Zahlen und Daten in Python

21,2017-11-22 
22,2017-11-23 
23,2017-11-24 
24,2017-11-27 
27,2017-11-28 
28,2017-11-29 
29,2017-11-30 

ich einen Python-Skript, das den ersten Wert in jeder Zeile mit dem heutigen Datum vergleichen muss. Wenn die Werte übereinstimmen, verwende ich das Datum aus derselben Zeile, um den nächsten Schritt auszuführen. Das Problem ist, dass ich das Datum von heute nicht mit der Nummer in der Textdatei abgleichen kann. Hier mein Skript ist:

import datetime 

a = open("NovemberDates.txt","r") 
current = datetime.date.today() 
day = current.day 

from datetime import datetime 

while True: 
    line = a.readline() 
    splitline = line.split(",") 
    number = splitline[0] 
    date = splitline[1] 
    if number == day: 
     print ('TODAY!!') 
    else: 
     print ('NOPE') 
    input('Press enter to continue: ') 
    if not line: 
     break 

Wenn Sie diesen Skript heute 2017.11.27, würde ich erwarten, eine gedruckte Nachricht bekommen „TODAY !!“ wenn das Skript Zeile 5 der Textdatei erreicht; 27,2017-11-28. Aber ich bekomme immer noch "NOPE", die mir sagt, Python erkennt nicht day = current.day als 27.

Was muss ich tun, um diese beiden Werte zu erhalten?

+0

Vielleicht könnten Sie repr() der Werte drucken, um Ihren Code zu debuggen. – cgte

Antwort

0

Die Art der number ist Zeichenfolge aber die Art der day ist int. Sie müssen den Typ einer dieser Variablen ändern. Ersetzen number == day durch int(number) == day oder number == str(day)

+0

louis - das funktioniert perfekt. Danke für die schnelle Antwort. – gacto

4

number ist ein String, aber day ist ein int. Sie können niemals gleich sein, da Python Typen nicht automatisch ausführt.

ändern number = splitline[0]-number = int(splitline[0]) und bereit sein splitline[0] ein ValueError im Falle zu fangen kann nicht in eine int umgewandelt werden.

Alternativ kann, wie vorgeschlagen @highlycaffeinated, können Sie day in eine Zeichenfolge konvertieren:
day = str(current.day).

Dies hat zwei Vorteile:
Die Umwandlung einmal durchgeführt werden, und keine ValueError wird erhöht werden (da im wesentlichen alles in einen String umgewandelt werden kann).

+0

wäre es besser, 'day' in eine Zeichenkette umzuwandeln, um a) die Konvertierung nur einmal durchzuführen, und b) das Szenario der fehlgeschlagenen Konvertierung (' ValueError') zu vermeiden? – highlycaffeinated

+0

@highlycaffeinated, ja, würde es. – DeepSpace

0

erhalten den Tag heute im gleichen Format

import datetime 
d = datetime.datetime.today() 
datetoday = d.strftime("%Y-%m-%d") 

sicherstellen, dass die Daten aus der Datei Leerzeichen keinen Hinter enthalten

date = splitline[1].strip() 

dann diesen datetoday verwenden mit date (splitline[1].strip()) in vergleichen Ihre Schleife

Schließlich verwenden Sie nicht "während True" lesen Sie die Daten in einer for-Schleife. Gefällt Ihnen dieses

import datetime 

a = open("NovemberDates.txt","r") 
d = datetime.datetime.today() 
datetoday = d.strftime("%Y-%m-%d") 

from datetime import datetime 

for line in a: 
    splitline = line.split(",") 
    number = int(splitline[0]) 
    date = splitline[1].strip() 
    if datetoday == date: 
     print ('TODAY!!') 
     print ("the magic number is %d"%number) 
     break 
    else: 
     print ('NOPE')