2009-04-28 2 views
3

Wenn ich laufen diese, wo vote.created_on ist ein Python-Datetime:Drucke lange ganze Zahlen in Python

import calendar 
created_on_timestamp = calendar.timegm(vote.created_on.timetuple())*1000 
created_on_timestamp = str(created_on_timestamp) 

created_on_timestamp mit Einkapseln Strichmarkierungen gedruckt werden ('). Wenn ich int() oder etwas ähnliches mache, bekomme ich etwas wie 1240832864000L, was keine Nummer ist, was JavaScript betrifft (wo ich diese Datumsangaben verwenden muss).

Kennt jemand den besten Weg, um mit dieser Situation umzugehen? Soll ich die Länge wie eine Schnur werfen und die Häkchen abziehen? Das scheint verrückt.

=== Edited Nachtrag ===

Das größere Problem war, dass Django "wurde die Umwandlung in das HTML ist codiert Äquivalent &. 39; (oder ähnlich) Der beste Weg, damit umzugehen ist, die lange konvertieren verwenden Sie eine Zeichenfolge in das und wenn die Vorlage die Zeichenfolge analysiert, {{created_on_timestamp | sicher}} die Anführungszeichen als Anführungszeichen zu machen

Antwort

5
>>> i = 1240832864000L 
>>> i 
1240832864000L 
>>> print i 
1240832864000 
>>> 
>>> '<script type="text/javascript"> var num = %s; </script>' % i 
'<script type="text/javascript"> var num = 1240832864000; </script>' 

die L zeigt nur auf, wenn Sie die __repr__

Objekt auslösen. W Wie senden Sie diese Daten an JavaScript? Wenn Sie es als JSON senden, sollten Sie sich keine Gedanken über lange Literale machen oder wie Python seine Objekte in Python anzeigt.

+0

Er ruft 'str (created_on_timestamp)', also wird '__str__' die magische Methode sein, oder? –

+0

Er bekommt in diesem Fall nicht das L, sondern die Zitate. Aber ja, wenn str() heißt __str__ ist die magische Methode genannt. –

4

Mit der Zeile:

created_on_timestamp = str(created_on_timestamp) 

Sie konvertieren etwas in einen String. Die Python-Konsole stellt Strings mit einfachen Anführungszeichen dar (ist das was Sie mit Tick-Zeichen meinen?). Die String-Daten enthalten natürlich keine Anführungszeichen.

Wenn Sie int() verwenden, um es in eine Zahl umzuwandeln, weiß int(), dass es lang ist, weil es zu groß ist, und gibt eine lange Ganzzahl zurück.

Die Python-Konsole repräsentiert diese lange Zahl mit einem nachlaufenden L. aber der numerische Inhalt enthält natürlich nicht die L.

>>> l = 42000000000 
>>> str(l) 
'42000000000' 
>>> l 
42000000000L 
>>> int(str(l)) 
42000000000L 
>>> type(int(str(l))) 
<type 'long'> 

Obwohl die Python Konsole Zahlen und Strings auf diese Weise (in Python-Syntax) darstellt, sollten Sie in der Lage sein, sie normalerweise zu verwenden. Erwarten Sie ein Problem oder haben Sie an dieser Stelle tatsächlich ein Problem?