2010-08-10 4 views
3

Je dispose d'un fichier au format suivantEn utilisant datetime et manipuler des chaînes de date en utilisant python

Summary:meeting Description:None DateStart:20100629T110000 DateEnd:20100629T120000 Time:20100805T084547Z 
Summary:meeting Description:None DateStart:20100630T090000 DateEnd:20100630T100000 Time:20100805T084547Z 

Je dois créer une fonction qui récupérerait « Résumé » à une donnée « date » et « temps ». Par exemple, la fonction aurait deux arguments, la date et l'heure, qui ne seront pas dans les formats de date et d'heure. Il doit vérifier si la date et l'heure spécifiées dans l'argument de la fonction se situent entre la date et l'heure dans DateStart et DateEnd dans le fichier.

Je ne suis pas sûr de savoir comment récupérer l'heure et la date à partir du format spécifié ci-dessus [c.-à-d., 20100629T110000]. J'essayais d'utiliser le suivant line_time = datetime.strptime(time, "%Y%D%MT%H%M%S"), où le temps est "20100629T110000", mais je reçois beaucoup d'erreurs, comme "datetime.datetime n'a pas d'attribut strptime".

Quelle est la bonne façon de faire cette fonction, merci d'avance.

.................... EDIT ................

Voici mon erreur

Python 2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 

    **************************************************************** 
    Personal firewall software may warn about the connection IDLE 
    makes to its subprocess using this computer's internal loopback 
    interface. This connection is not visible on any external 
    interface and no data is sent to or received from the Internet. 
    **************************************************************** 

>>> 
Traceback (most recent call last): 
    File "C:\Python24\returnCalendarstatus", line 24, in -toplevel- 
    status = calendarstatus() 
    File "C:\Python24\returnCalendarstatus", line 16, in calendarstatus 
    line_time = datetime.strptime(time, "%Y%m%dT%H%M%S") 
AttributeError: type object 'datetime.datetime' has no attribute 'strptime' 
>>> 

Et voici mon code

import os 
import datetime 
import time 
from datetime import datetime 

def calendarstatus(): 

    g = open('calendaroutput.txt','r') 
    lines = g.readlines() 
    for line in lines:   
     line=line.strip() 
     info=line.split(";") 
     summary=info[1] 
     description=info[2] 
     time=info[5]; 
     line_time = datetime.strptime(time, "%Y%m%dT%H%M%S") 
     return line_time.year 

status = calendarstatus() 
+1

Afficher le message d'erreur exact, s'il vous plaît. –

Répondre

6

ne pas confondre avec the datetime modulethe datetime Objects in the module.

Le module n'a pas de fonction strptime, mais l'objet a une méthode de classe strptime:

>>> time = "20100629T110000" 
>>> import datetime 
>>> line_time = datetime.strptime(time, "%Y%m%dT%H%M%S") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'strptime' 
>>> line_time = datetime.datetime.strptime(time, "%Y%m%dT%H%M%S") 
>>> line_time 
datetime.datetime(2010, 6, 29, 11, 0) 

Notez la deuxième fois que nous devons faire référence à la classe comme datetime.datetime.

Sinon, vous pouvez importer simplement la classe:

>>> from datetime import datetime 
>>> line_time = datetime.strptime(time, "%Y%m%dT%H%M%S") 
>>> line_time 
datetime.datetime(2010, 6, 29, 11, 0) 

Aussi, j'ai changé votre format string%Y%D%MT%H%M%S-%Y%m%dT%H%M%S que je pense est ce que vous voulez.

+0

Merci pour la réponse. J'ai essayé d'importer la classe, je reçois toujours la même erreur. De plus, une fois que cela est corrigé, line_time.year pourrait-il retourner 2010? – user392409

+0

@ user392409: L''erreur "datetime.datetime n'a pas d'attribut strptime" s'affiche car vous faites toujours l'erreur ci-dessus ** quelque part **. –

+0

Une fois que cela fonctionne 'line_time.year' sera 2010; Notez qu'il s'agit d'un attribut * * 2010 * plutôt que d'une méthode * renvoie * 2010. Quel est le message d'erreur que vous obtenez? Si l'objet '' module '' n'a pas d'attribut 'strptime', alors vous n'avez pas importé la classe. –

6

Vous devez réellement lire la documentation appropriée pour votre version de Python. Voir la note sur strptime dans le docs for datetime:

Nouveauté de la version 2.5.

et vous utilisez la version 2.4. Vous devrez utiliser la solution de contournement mentionnée dans cette documentation:

import time 
import datetime 
[...] 
time_string = info[5] 
line_time = datetime(*(time.strptime(time_string, "%Y%m%dT%H%M%S")[0:6])) 
Questions connexes