2017-01-18 29 views
7

In meiner App finde ich mich mit stftime viel, und vor allem mit 2 Zeichenketten Formate - ("% d /% m/% Y ") und ("% H:% M ")Wo übliche strftime Strings wie (0%) enthalten sind

Anstatt die Zeichenfolge jedes Mal zu schreiben, möchte ich diese Zeichenfolgen in einigen globalen Variablen oder etwas speichern, so dass ich die Formatstrings an nur einer Stelle definieren kann in meiner App.

Was ist die pythonische Art, das zu tun? Sollte ich ein globales Diktat, eine Klasse, eine Funktion oder etwas anderes verwenden?

Vielleicht so?

class TimeFormats(): 
    def __init__(self): 
     self.date = "%d/%m/%Y" 
     self.time = "%H:%M" 

Oder so?

def hourFormat(item): 
    return item.strftime("%H:%M") 

Danke für die Hilfe

Antwort

1

Sie könnten Ihr eigenes Einstellungsmodul erstellen, wie es Django tut.

settings.py:

# locally customisable values go in here 
DATE_FORMAT = "%d/%m/%Y" 
TIME_FORMAT = "%H:%M" 
# etc. 
# note this is Python code, so it's possible to derive default values by 
# interrogating the external system, rather than just assigning names to constants. 

# you can also define short helper functions in here, though some would 
# insist that they should go in a separate my_utilities.py module. 

# from moinuddin's answer 

def datetime_to_str(datetime_obj): 
    return datetime_obj.strftime(DATE_FORMAT) 

anderswo

from settings import DATE_FORMAT 
... 
time.strftime(DATE_FORMAT, ...) 

oder

import settings 
... 
time.strftime(settings.DATE_FORMAT, ...) 
+0

Danke, sieht eine Einstellungsdatei mit wie ein guter, zentraler Ort, um Sachen wie das zu halten –

6

Sie functools.partial verwenden könnte eine Funktion hält das Format zu generieren:

import time,functools 

time_dhm = functools.partial(time.strftime,"%d/%m/%Y") 
time_hm = functools.partial(time.strftime,"%H:%M") 

print(time_dhm(time.localtime())) 
print(time_hm(time.localtime())) 

Ergebnis:

18/01/2017 
10:38 

Sie nur die time passieren müssen Struktur zur neuen Funktion. Die Funktion enthält das Format.

Hinweis: Sie können das gleiche tun mit lambda:

time_dhm = lambda t : time.strftime("%d/%m/%Y",t) 
3

Ich denke, es ist besser, eine benutzerdefinierte Funktion zu erstellen, dies zu erreichen. Zum Beispiel:

def datetime_to_str(datetime_obj): 
    return datetime_obj.strftime("%d/%m/%Y") 

Probelauf:

>>> from datetime import datetime 

>>> datetime_to_str(datetime(1990, 3, 12)) 
'12/03/1990' 

wird es viel freundlicher für die anderen Entwickler sein, wie der Name der Funktion selbsterklärend ist. Jedes Mal, wenn eine Umwandlung von datetime zu str erforderlich ist, werden sie wissen, welche Funktion aufgerufen werden muss. Und wenn Sie das Format durch die Anwendung ändern möchten; es wird einen einzigen Punkt der Veränderung geben.

Verwandte Themen