簡體   English   中英

從python中的字典中提取日期

[英]Extract a date from a dict in python

我有這樣的命令:

SHOPS_AND_ORDERNUM = {
'Shop - Produce - 20180212.xlsx': 1334, 
'Shop - Organic - 20180223.xlsx': 8893, 
'Shop - Fresh - 20180226.xlsx': 5557,
'Shop - Dairy - 20180227.xlsx': 3870 
}

我想將上述字典中的日期提取為以下格式:DD-MM-YYYY

我是正則表達式的新手,但我的嘗試一直失敗。

我開始這樣的事情:

for i, j in DATA_FILES_AND_SO.items():
     m = re.search(some_logic, i)
     if m:
     found = m.group(1)

任何幫助將非常感激!

您可以使用正則表達式:

import re
SHOPS_AND_ORDERNUM = {
'Shop - Produce - 20180212.xlsx': 1334, 
'Shop - Organic - 20180223.xlsx': 8893, 
'Shop - Fresh - 20180226.xlsx': 5557,
'Shop - Dairy - 20180227.xlsx': 3870 
}
new_data = {(lambda x:(x[7:], x[4:6], x[:4]))(re.findall('\d+', a)[0]):b for a, b in SHOPS_AND_ORDERNUM.items()}

輸出:

{('2', '02', '2018'): 1334, ('3', '02', '2018'): 8893, ('6', '02', '2018'): 5557, ('7', '02', '2018'): 3870}

或者,代替元組:

new_data = {'{}-{}-{}'.format(*a[::-1]):b for a, b in new_data.items()}

輸出:

{'2018-02-2': 1334, '2018-02-7': 3870, '2018-02-3': 8893, '2018-02-6': 5557}

您可以使用datetime模塊獲取所需的日期格式

例如:

# -*- coding: utf-8 -*-
import datetime
SHOPS_AND_ORDERNUM = {
'Shop - Produce - 20180212.xlsx': 1334,
'Shop - Organic - 20180223.xlsx': 8893,
'Shop - Fresh - 20180226.xlsx': 5557,
'Shop - Dairy - 20180227.xlsx': 3870
}

for k,v in SHOPS_AND_ORDERNUM.items():
    print datetime.datetime.strptime(k.split("-")[-1].rstrip(".xlsx").strip(), "%Y%m%d"  ).strftime("%d-%m-%Y")

輸出:

27-02-2018
26-02-2018
23-02-2018
12-02-2018

更多信息

  1. k.split("-")[-1].rstrip(".xlsx").strip() #從密鑰中獲取日期字符串。 例如: 20180212
  2. datetime.datetime.strptime #將datetime.datetime.strptime時間轉換為所需的格式。 "%d-%m-%Y"
import datetime

dates = []

for i, j in DATA_FILES_AND_SO.items():
     date = i[-13:-5]
     dates.append(datetime.datetime.strptime(date, '%Y%m%d'))

如果格式沒有更改,則可以使用此格式(不需要RegEx):

SHOPS_AND_ORDERNUM = {
    'Shop - Produce - 20180212.xlsx': 1334,
    'Shop - Organic - 20180223.xlsx': 8893,
    'Shop - Fresh - 20180226.xlsx': 5557,
    'Shop - Dairy - 20180227.xlsx': 3870
}

for item in SHOPS_AND_ORDERNUM:
    date = item.split('.xlsx')[0][-8:]
    print(date)

輸出:

20180212
20180223
20180226
20180227

現在,要獲取所需格式的日期,可以使用datetime模塊,如下所示:

for item in SHOPS_AND_ORDERNUM:
    date = datetime.datetime.strptime(item.split('.xlsx')[0][-8:], '%Y%m%d').strftime('%d-%m-%Y')
    print(date)

輸出:

12-02-2018
23-02-2018
26-02-2018
27-02-2018

您要查找的基本正則表達式為([0-9] +)(?=。)\\ g。 您可以在https://regex101.com/上使用它。

對於日期字符串轉換,可以使用Carbon庫,例如

$newDateString = \\Carbon::parse('20180212')->format('DD-MM-YYYY');

另請參見Carbon Docs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM