تخلص من الأصفار الرائدة لسلاسل التاريخ في بيثون؟ [مكرر

StackOverflow https://stackoverflow.com/questions/2309828

  •  22-09-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

هل هناك طريقة ذكية للتخلص من الأصفار الرائدة لسلاسل التاريخ في بيثون؟

في المثال أدناه ، أود الحصول على 12/1/2009 في المقابل بدلاً من 12/01/2009. أعتقد أنه يمكنني استخدام التعبيرات العادية. لكن بالنسبة لي يبدو أن المبالغة. هل هناك حل أفضل؟

>>> time.strftime('%m/%d/%Y',time.strptime('12/1/2009', '%m/%d/%Y'))
'12/01/2009'

أنظر أيضا

Python Strftime - تاريخ بدون قيادة 0؟

هل كانت مفيدة؟

المحلول

OP ، لا يتطلب الأمر الكثير من معالجة السلسلة.

>>> t=time.strftime('%m/%d/%Y',time.strptime('12/1/2009', '%m/%d/%Y'))
>>> '/'.join( map( str, map(int,t.split("/")) ) )
'12/1/2009'

نصائح أخرى

حل أبسط وقابل للقراءة هو تنسيقه بنفسك:

>>> d = datetime.datetime.now()
>>> "%d/%d/%d"%(d.month, d.day, d.year)
4/8/2012

أود أن أقترح تعبيرًا منتظمًا بسيطًا جدًا. ليس مثل هذا هو الأداء الحرجة ، أليس كذلك؟

البحث عن \b0 واستبدل لا شيء.

بمعنى آخر.:

import re
newstring = re.sub(r"\b0","",time.strftime('%m/%d/%Y',time.strptime('12/1/2009', '%m/%d/%Y')))
>>> time.strftime('%-m/%-d/%Y',time.strptime('8/1/2009', '%m/%d/%Y'))
'8/1/2009'

ومع ذلك ، أظن أن هذا يعتمد على النظام strftime() التنفيذ وقد لا يكون محمولًا تمامًا لجميع المنصات ، إذا كان ذلك مهمًا لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top