我有这样的字典:
SHOPS_AND_ORDERNUM = {
'Shop - Produce - 20180212.xlsx': 1334,
'Shop - Organic - 20180223.xlsx': 8893,
'Shop - Fresh - 20180226.xlsx': 5557,
'Shop - Dairy - 20180227.xlsx': 3870
}
我想从上面的dict中提取日期到表单中: DD-MM-YYYY
我是正则表达式的新手,我的尝试一直在失败。
我已经开始这样的事了:
for i, j in DATA_FILES_AND_SO.items():
m = re.search(some_logic, i)
if m:
found = m.group(1)
非常感谢任何帮助!
答案 0 :(得分:3)
您可以使用正则表达式:
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}
答案 1 :(得分:3)
您可以使用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
<强> MoreInfo 强>
k.split("-")[-1].rstrip(".xlsx").strip()
#从密钥中获取日期字符串。例如:20180212
datetime.datetime.strptime
#将datetime转换为您所需的格式。 "%d-%m-%Y"
答案 2 :(得分:3)
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'))
答案 3 :(得分:1)
如果格式没有改变,你可以使用它(不需要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
答案 4 :(得分:1)
您正在寻找的基本正则表达式是([0-9] +)(?=。)\ g。您可以在https://regex101.com/上使用它。
对于日期字符串转换,您可以使用Carbon库,例如
$newDateString = \Carbon::parse('20180212')->format('DD-MM-YYYY');
另请参阅Carbon Docs。