【发布时间】:2020-11-11 20:11:33
【问题描述】:
我正在尝试从多个 url 创建一个数组,以将 URL 排序到每周。我怎样才能使用数组函数来做到这一点?我知道要拆分 URL 中的日期,我使用拆分功能:
array = url.split('/')
但是我怎样才能将它们按周分类? URL 如下所示:
感谢您的帮助!
【问题讨论】:
我正在尝试从多个 url 创建一个数组,以将 URL 排序到每周。我怎样才能使用数组函数来做到这一点?我知道要拆分 URL 中的日期,我使用拆分功能:
array = url.split('/')
但是我怎样才能将它们按周分类? URL 如下所示:
感谢您的帮助!
【问题讨论】:
首先,您需要隔离 URL 的日期部分。
假设您所有的 URL 看起来都一样(即 `https://somedomain.tld/year/month/day/wathever-else),您有几种解决方案:正则表达式、斜杠分割等等。请小心选择最适合您的问题的解决方案,因为如果所有 URL 的格式不同,此步骤可能无法按预期工作。
然后,您可以使用datetime.strptime 函数将字符串日期转换为日期时间对象。在此处查看更多信息:https://docs.python.org/fr/3.6/library/datetime.html#datetime.datetime.strptime
一旦您拥有每个 URL 的日期时间对象,您就可以按照您喜欢的方式对数组进行排序。
所以:
strptime 将它们转换为日期时间如果您想出一些代码,我们或许可以为您提供更好的帮助。
【讨论】:
想法是从 url 中提取日期,并按日期对 url 列表进行排序。
见下文
import datetime
urls = [
'http://www.nytimes.com/2016/04/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html',
'http://www.nytimes.com/2015/03/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html',
'http://www.nytimes.com/2017/04/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html',
'http://www.nytimes.com/2011/12/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html',
'http://www.nytimes.com/2011/04/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html']
url_parts = [(url, url.split('/')) for url in urls]
tmp = []
for url_pair in url_parts:
tmp.append((url_pair[0], datetime.datetime(int(url_pair[1][3]), int(url_pair[1][4]), int(url_pair[1][5]))))
final = [u[0] for u in sorted(tmp, key=lambda u: u[1])]
for url in final:
print(url)
输出
http://www.nytimes.com/2011/04/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html
http://www.nytimes.com/2011/12/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html
http://www.nytimes.com/2015/03/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html
http://www.nytimes.com/2016/04/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html
http://www.nytimes.com/2017/04/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html
【讨论】:
简单的示例解决方案:
import datetime
url = "http://www.nytimes.com/2016/04/28/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html"
url2 = "http://www.nytimes.com/2016/04/23/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html"
array = url.split("/")
array2 = url2.split("/")
x = datetime.datetime(int(array[3]), int(array[4]), int(array[5]))
x2 = datetime.datetime(int(array2[3]), int(array2[4]), int(array2[5]))
listing = [x,x2]
print(sorted(listing))
#[datetime.datetime(2016, 4, 23, 0, 0), datetime.datetime(2016, 4, 28, 0, 0)]
您当然可以使用许多 url 循环执行此操作, sorted 将对您的日期时间对象进行排序,没有内置方法来确定一年中的哪一周,如果这是您想要的,您需要将这些日期时间转换为一周给定年份。
【讨论】: