2016-06-20 6 views
0

Поэтому у меня есть небольшой питон скрипт, который будет спрашивать пользователя для пользователя, то он будет копировать их журналы для определенного twitch.tv канала от overrustlelogs.netПеребор и конкатенация файлов журнала

На данный момент я просто есть 2 списка, один в течение нескольких месяцев один за год, потому что URL журнала принимает формат

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'] 

Как у ou может видеть мой способ использования цикла for и считать индекс каждого цикла довольно глупым, потому что мне приходится вручную редактировать список каждый месяц.

Что может быть лучше? Я хочу, чтобы программа загружала журналы с сентября 2014 года до текущего месяца и года

+0

не предназначен для работы; Я сказал, что он принимает формат – Cherona

+1

, поэтому похоже, что вы хотите знать «Как я могу сгенерировать список, содержащий каждый месяц и год от t0 до t1?» где 't0 = sep/14' и' t1 = jun/16' ... вы должны отредактировать свой заголовок –

+0

По * 'rip' * logs вы имеете в виду * 'destroy' * them? –

ответ

0

Вот простой сценарий, который поможет вам.

  1. Он создает список с днями между определенными датами, используя datetime.timedelta().

  2. Затем форматировать эти дни, используя только название месяца и год (%B-%Y)

  3. И, наконец, удалить дубликаты с помощью if not in условия во время цикла через расчетные дни между t0 и t1.


Код:

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 

Выход:

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 

dates С списка поколения создававший, теперь мы можем создать ССЫЛКИ:

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 

Выхода:

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

Помимо datetime модуля, вы также можете взглянуть на calendar модуле. Тем не менее, он не имеет встроенного итерации в течение нескольких месяцев.

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) 
Смежные вопросы