Python 组合strtime和strftime循环
如何组合这些循环,提取日期字符串,使用strtime识别它们,并使用strftime重新格式化它们Python 组合strtime和strftime循环,python,python-3.x,Python,Python 3.x,如何组合这些循环,提取日期字符串,使用strtime识别它们,并使用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.strpt
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]
您可以链接表达式:
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方法,但最好只在实例上使用它
当然,上面的内容不那么可读。我仍然会拆分表达式,但您可以使用生成器表达式来链接处理:
date_strings = (re.search(r'(\d+/\d+/\d+)', elm.get_text()).group(1)
for elm in soup.find_all('div', {'class' : "review-content"}))
dates = [datetime.strptime(ds, '%m/%d/%Y').strftime('%Y-%m-%d') for ds in date_strings]
这将文本处理与HTML分离,并在两个单独的表达式中将这些字符串重新格式化为不同的日期格式,但只生成一个列表。对日期字符串的迭代可根据需要处理组元素。您可以链接表达式:
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方法,但最好只在实例上使用它
当然,上面的内容不那么可读。我仍然会拆分表达式,但您可以使用生成器表达式来链接处理:
date_strings = (re.search(r'(\d+/\d+/\d+)', elm.get_text()).group(1)
for elm in soup.find_all('div', {'class' : "review-content"}))
dates = [datetime.strptime(ds, '%m/%d/%Y').strftime('%Y-%m-%d') for ds in date_strings]
这将文本处理与HTML分离,并在两个单独的表达式中将这些字符串重新格式化为不同的日期格式,但只生成一个列表。对日期字符串的迭代可按需处理组元素。这是一种可读的方式:
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"})))
这是一种可读的方式:
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"})))
您可以链接这些方法
dates2 = [datetime.strptime(date, '%m/%d/%Y').strftime('%Y-%m-%d') for date in dates]
您可以链接这些方法
dates2 = [datetime.strptime(date, '%m/%d/%Y').strftime('%Y-%m-%d') for date in dates]
为了可读性和你自己的理智,不要重复地串成一个长长的“一行”表达式。试着分开。我给出了一个解决方案,它避免了多个循环,而且可读性也很好,但是会有其他选择。感谢提示-可读性很重要。compose看起来是一个很好的软件包。为了可读性和你自己的理智,不要重复地串成一个长的“一行”表达式。试着分开。我给出了一个解决方案,它避免了多个循环,而且可读性也很好,但是会有其他选择。感谢提示-可读性很重要。compose看起来是个不错的软件包。