组合strptime和strftime循环

2024-06-16 09:46:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在提取日期字符串、用strptime识别它们并用strftime重新格式化它们时,如何组合这些循环?在

datesandcontent = [elm.get_text() for elm in soup.find_all('div', {'class' : "review-content"})]
dates = [re.search(r'(\d+/\d+/\d+)', elm).group(1) for elm in datesandcontent]
dates2 = [datetime.strptime(date, '%m/%d/%Y') for date in dates]
dates3 = [datetime.strftime(date2, '%Y-%m-%d') for date2 in dates2]

Tags: 字符串textinforgetdatetimedatedates
3条回答

这是一种可读的方法:

from toolz import compose

def get_text(x): return x.get_text()
def searcher(x): return re.search(r'(\d+/\d+/\d+)', x).group(1)
def strp1(x): return datetime.strptime(x, '%m/%d/%Y')
def strp2(x): return datetime.strftime(x, '%Y-%m-%d')

calculator = compose(strp2, strp1, searcher, get_text)

result = list(map(calculator, soup.find_all('div', {'class' : "review-content"})))

可以链接表达式:

dates = [datetime.strptime(re.search(r'(\d+/\d+/\d+)', elm.get_text()).group(1), '%m/%d/%Y').strftime('%Y-%m-%d') 
         for elm in soup.find_all('div', {'class' : "review-content"})]

strftime()datetime实例上的方法。使用datoetime.strftime(dt, ...)是因为您引用了unbound方法,但最好是在实例上使用它。在

当然,上面的内容并不那么易读。我仍然会拆分表达式,但您可以使用生成器表达式来链接处理:

^{pr2}$

这将文本处理与HTML分开,并在两个单独的表达式中将这些字符串重新格式化为不同的日期格式,但只构建一个列表。date_strings上的迭代按需处理美化组元素。在

你可以把方法链起来。在

dates2 = [datetime.strptime(date, '%m/%d/%Y').strftime('%Y-%m-%d') for date in dates]

相关问题 更多 >