【问题标题】:How do I sort dates into an array from a URL list?如何从 URL 列表中将日期排序到数组中?
【发布时间】:2020-11-11 20:11:33
【问题描述】:

我正在尝试从多个 url 创建一个数组,以将 URL 排序到每周。我怎样才能使用数组函数来做到这一点?我知道要拆分 URL 中的日期,我使用拆分功能:

array = url.split('/')

但是我怎样才能将它们按周分类? URL 如下所示:

网址:http://www.nytimes.com/2016/04/18/us/politics/focus-on-chief-justice-as-supreme-court-hears-immigration-challenge.html

感谢您的帮助!

【问题讨论】:

    标签: python arrays url split


    【解决方案1】:

    首先,您需要隔离 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 的日期时间对象,您就可以按照您喜欢的方式对数组进行排序。

    所以:

    1. 使用适合您问题的任何方法从 URL 中提取日期字符串
    2. 对于每个日期字符串,使用strptime 将它们转换为日期时间
    3. 使用日期时间对象对列表进行排序

    如果您想出一些代码,我们或许可以为您提供更好的帮助。

    【讨论】:

      【解决方案2】:

      想法是从 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
      

      【讨论】:

        【解决方案3】:

        简单的示例解决方案:

        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 将对您的日期时间对象进行排序,没有内置方法来确定一年中的哪一周,如果这是您想要的,您需要将这些日期时间转换为一周给定年份。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-16
          • 1970-01-01
          • 2020-01-21
          • 1970-01-01
          • 2015-06-03
          • 1970-01-01
          • 2020-03-31
          • 2019-06-18
          相关资源
          最近更新 更多