2017-01-04 4 views
1

Ich versuche, ein Datum zu analysieren und sie im richtigen Format ausgedrückt, ist es das, was ich bisher versucht:Typeerror: eine ganze Zahl erforderlich ist, während in Python mit replace()

import csv 
import sys 
import os 
import re 
import fnmatch 
import csv 
from dateutil.parser import parse as parseDate 
from datetime import datetime, time, timedelta 

chaine = '16/12/201602:15:00' 
date = chaine[:10] + " " + chaine[11:] 
print date 
newd = parseDate(date, yearfirst=True) 
print newd 
newd = newd.replace('-','') 
newd = newd.replace(':','') 
print newd 

Dies ist, was Bekomme ich als Ergebnis:

16/12/2016 2:15:00 
2016-12-16 02:15:00 
Traceback (most recent call last): 
    File "t.py", line 25, in <module> 
    newd = newd.replace('-','') 
TypeError: an integer is required 

Was vermisse ich hier?

Danke

+3

'newd' ist eine Zeichenfolge nicht verwenden können. Verwenden Sie 'newd = str (newd) .replace ('-', '')' anstelle von 'newd = newd.replace ('-', '')'. –

+1

danke! Könntest du eine Antwort schreiben, damit ich sie annehmen kann? – JavaQueen

+1

Wenn dein Date ''16/12/201602: 15: 00'' ist, dann deine Einstellung für' yearfirst' in 'parseDate (date, yearfirst = True)' scheint auch falsch zu sein, aber ohne Auswirkungen auf das Ergebnis, so dass Sie diese Option fallen lassen können –

Antwort

2

Um Ihre aktuelle Logik zu beheben, müssen Sie die newd Variable in einen String nach parseDate würfen

newd = str(newd).replace('-','') 
     ^^^^^^^^^ 

Siehe Python demo

Alternativ können Sie die strptime/strftime :

from dateutil.parser import parse as parseDate 
from datetime import datetime, time, timedelta 
from time import strftime 

chaine = '16/12/201602:15:00' 
dt = datetime.strptime(chaine, '%d/%m/%Y%I:%M:%S') 
# 16/12/2016 2:15:00 
print(dt.strftime("%Y/%m/%d %H:%M:%S")) 
#2016-12-16 02:15:00 
print(dt.strftime("%Y-%m-%d %H:%M:%S")) 
# 20161216 021500 
print(dt.strftime("%Y%m%d %H%M%S")) 

Siehe another Python demo.

+0

besser wäre 'strftime' zu ​​verwenden –

+0

@ MaartenFabré: Ja, ich weiß, hatte einfach keine Zeit, um eine Demo vorzubereiten. Jetzt hinzugefügt. –

0

In Ihrem Code ist newd ein datetime.datetime Objekt, keine Zeichenkette. Sie können es mit

print type(newd) shows <type 'datetime.datetime'> 

sehen, so dass Sie einen String-Ersatz nicht verwenden können.
Sie diskrete Eigenschaften wie

newd.year .month .day etc. 

Ihren eigenen String zu erstellen. (Mehr Python doc)
oder spielen schneller mit dem strftime Methode

Verwandte Themen