2016-06-20 18 views
0

So habe ich einen kleinen Python-Skript, das den Benutzer nach einem Benutzername fragen wird, dann wird es ihre Protokolle für einen bestimmten twitch.tv Kanal von overrustlelogs.netLooping durch und verketten Protokolldateien

Im Moment reißt ich nur haben zwei Listen, eine für Monate eine für das Jahr, weil das Protokoll URL das Format

http://overrustlelogs.net/Channel%20chatlog/MonthName%20Year/user.txt

months = ['September','October','November','December','January','February','March','April','May','June','July','August','September','October','November','December','January','February','March','April','May','June','July','August'] 
years = ['2014','2014','2014','2014','2015','2015','2015','2015','2015','2015','2015','2015','2015','2015','2015','2015','2016','2016','2016','2016','2016','2016','2016','2016'] 

As y nimmt Sie können sehen, wie ich eine for-Schleife verwende, und den Index jeder Schleife zu nehmen, ist ziemlich dumm, weil ich die Liste jeden Monat manuell bearbeiten muss.

Was ist eine bessere Möglichkeit, dies zu tun? Ich möchte, dass das Programm die Protokolle von September 2014 auf den aktuellen Monat und Jahr

+0

es soll nicht arbeiten; Ich sagte, dass es das Format von – Cherona

+1

nimmt, also sieht es so aus, als ob du wissen willst "Wie kann ich eine Liste erstellen, die jeden Monat und jedes Jahr von t0 bis t1 enthält?" wo 't0 = sep/14' und' t1 = jun/16' ... solltest du deinen Titel editieren –

+0

Mit * 'rip' * logs meinst du * zerstöre * sie? –

Antwort

0

herunterladen Hier ist ein einfaches Skript, das Ihnen helfen wird.

  1. Es erstellt eine Liste mit Tagen zwischen bestimmten Terminen datetime.timedelta() verwenden.

  2. Dann ist es in diesen Tagen formatiert unter Verwendung eines if not in Zustand nur Monatsname und Jahr (%B-%Y)

  3. Und schließlich Duplikate entfernen mit, während sie zwischen t0 und t1 durch den berechneten Tage Looping.


Code:

t0 = '21-06-2014' 
t1 = '07-01-2016' 

#formatting in the proper way to use timedelta() 
start = datetime.datetime.strptime(t0, "%d-%m-%Y") 
end = datetime.datetime.strptime(t1, "%d-%m-%Y") 

#generating dates using list comprehension and timedelta() 
date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)] 

#removing duplicates using loop and 'if not in' 
dates = [] 

for date in date_generated: 
    s = str(date.strftime("%B-%Y")) 
    if s not in dates: 
     dates.append(s) 

#printing dates  
for date in dates: 
    print date 

Ausgang:

June-2014 
July-2014 
August-2014 
September-2014 
October-2014 
November-2014 
December-2014 
January-2015 
February-2015 
March-2015 
April-2015 
May-2015 
June-2015 
July-2015 
August-2015 
September-2015 
October-2015 
November-2015 
December-2015 
January-2016 

Mit der dates Liste gen erated können wir schaffen jetzt die URLs mit:

for date in dates: 
    MonthName = date.split('-')[0] 
    Year = date.split('-')[1] 
    url = 'http://overrustlelogs.net/Channel%20chatlog/' + MonthName + '%20' + Year + '/user.txt' 
    print url 

Ausgang:

http://overrustlelogs.net/Channel%20chatlog/June%202014/user.txt 
http://overrustlelogs.net/Channel%20chatlog/July%202014/user.txt 
http://overrustlelogs.net/Channel%20chatlog/August%202014/user.txt 
http://overrustlelogs.net/Channel%20chatlog/September%202014/user.txt 
http://overrustlelogs.net/Channel%20chatlog/October%202014/user.txt 
http://overrustlelogs.net/Channel%20chatlog/November%202014/user.txt 
http://overrustlelogs.net/Channel%20chatlog/December%202014/user.txt 
http://overrustlelogs.net/Channel%20chatlog/January%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/February%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/March%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/April%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/May%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/June%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/July%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/August%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/September%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/October%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/November%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/December%202015/user.txt 
http://overrustlelogs.net/Channel%20chatlog/January%202016/user.txt 
0

Neben datetime Modul können Sie auch bei calendar Modul einen Blick darauf werfen. Es hat jedoch keine integrierte, um durch Monate zu iterieren.

import calendar 
from collections import namedtuple 

MonthWithYear = namedtuple('MonthWithYear', ['month', 'year']) 

def months_between(since, until): 
    def between_including(array, el1, el2): 
     since = array.index(el1) 
     until = array.index(el2) 
     yield from array[since: until + 1]# *including* last element too 
    months = calendar.month_name 
    if since.year == until.year: 
     for month in between_including(list(months), since.month, until.month): 
      yield MonthWithYear(month, since.year) 
    else: 
     yield from months_between(since, MonthWithYear(months[-1], since.year)) 
     for year in range(since.year + 1, until.year): 
      yield from months_between(MonthWithYear(months[1], year), MonthWithYear(months[-1], year)) 
     yield from months_between(MonthWithYear(months[1], until.year), until) 

since = MonthWithYear('January', 2016) 
until = MonthWithYear('August', 2019) 


for month in months_between(since, until): 
    print(month.month, month.year)