2016-12-19 3 views
-1

Ich habe eine .txt-Datei und deren Inhalt ist wie folgt:Python - ‚Valueerror: Zeitdaten '' nicht mit Format '% d /% m /% Y'

--------------- 
0, 
test1 
[email protected] 
19/12/2016 
--------------- 

I attemping bin um das Datum zu lesen und es mit dem gegenwärtigen zu vergleichen.

Jetzt gibt es mir die Nachricht im Titel, aber ich habe versucht, das aktuelle Datum und das Datum zu formatieren, die ich aus meiner Datei zu %d/%m/%Y passen. also vermute ich, dass es sich um ein Problem mit dem Lesen von Dateien handelt, aber ich kann meinen Fehler nicht finden.

present = datetime.now() # Get current time 
print "Present time: ", present.strftime('%d/%m/%Y') # Format present time 

with open("birthday.txt", 'r') as database: 
    last_line = database.readline()[-1] 
    while junk != last_line: 
     junk = database.readline().strip('\n') 
     name_bday = database.readline().strip('\n') 
     mail_bday = database.readline().strip('\n') 
     date_bday = database.readline().strip('\n') 

     print junk 
     print name_bday 
     print mail_bday 
     print date_bday 

     list_date = time.strptime(date_bday, "%d/%m/%Y") 
     date = datetime.fromtimestamp(mktime(list_date)) 

     if date == present: 
      print "It's your birthday!" 
     else: 
      print "It's not your birthday." 
+1

'database.readline() [-1] 'gibt nicht die letzte Zeile in der Datei zurück. – DeepSpace

+0

Oh, ich dachte es wäre so. Wie sonst würdest du das sonst tun? – javanewbie

+0

@javanewbie 'database.readlines() [- 1]'. Mit 's' nach' readline' –

Antwort

0

Wenn Sie absolut keine Kontrolle über das Format Eingang haben, dann sollten Sie die folgende Textdatei:

--------------- 
0, 
test1 
[email protected] 
19/12/2016 
--------------- 
1, 
test2 
[email protected] 
01/01/2016 

Dann:

from datetime import datetime 

present = datetime.now() # Get current time 
print("Present time: ", present.strftime('%d/%m/%Y')) # Format present time 

with open("birthday.txt") as database: 
    file_data = database.read() 

# splitting by separator 
info = [line.strip() for line in file_data.split('---------------') if line] 
print(info) 
# ['0,\ntest1\[email protected]\n19/12/2016', '1,\ntest2\[email protected]\n01/01/2016'] 

for line in info: 
    _, name_bday, mail_bday, date_bday = line.split('\n') 
    list_date = datetime.strptime(date_bday, "%d/%m/%Y") 
    print(list_date) 
    # 2016-12-19 00:00:00 first iteration 
    # 2016-01-01 00:00:00 second iteration 
+0

Danke. :) Ich habe 'list_date.strftime' ('% d /% m /% Y') 'hinzugefügt, weil ich das Format brauche, das wir in Europa benutzen – javanewbie

Verwandte Themen