Использование функции в другой и трудное время с циклом / аргументом - PullRequest
0 голосов
/ 15 октября 2018

Включено 3 функции:

Obtain_events()
obtain_date(date)
obtain_day_year(month, day) 

Этот список списков находится в функции receive_events ().

[['Musique', 'Shawn Phillips', '2018-08-24', '2018-08-24'],
 ['Musique', "L'avenue Royale fête l'été!", '2018-08-25', '2018-08-25'],
 ['Musique', 'Perséides musicales', '2018-08-03', '2018-08-03'],
 ['Musique', 'Gaétan Leclerc chante Félix et…', '2018-08-17', '2018-08-17'], 
 ['Musique', 'The Ring of Fire : a Johnny Cash Experience', '2018-07-21', '2018-07-21'],

Мне нужно вызвать receive_date (date) в receive_events (), чтобы изменить всю дату, которая является строкой как int.Теперь функция receive_date (date) уже работает и отвечает за получение аргумента str как «YYYY-MM-DD».У меня проблемы с аргументом и как я должен взять каждый индекс, который имеет дату, и поместить их в мой аргумент даты (каждый подсписок имеет 2 даты).Теперь вот код для каждой функции

def obtenir_events():

    evenement = open("evenements.txt", "r", encoding="utf-8-sig")
    ma_liste = []

    for element in evenement.readlines():
        #return the list of lists.
        ma_liste.append(element.strip().split('/'))      


def obtain_date(date):

date_list = date[5:].split('-')
        month,day = date_list
        day = obtenir_day_year(int(month),int(day))
        # This function works as far as I can tell. I'm allowed to modify it,
        # but I don't see the point. 
        return  day    


 obtain_day_year(month, day)   

 date_reference = date(2017, 12, 31) 

 date_actuelle = date(2018, mois, jour) 

## works and I'm not allowed to modify it. It's in french but it works only if you
## import **from datetime import date**. It returns the days of the year as
## long as it's an int, and it's working since I'm using it in
## `obtain_date(date).`
return (date_actuelle - date_reference).days

Итак, вот проблема:

Мне нужно, чтобы я мог вызывать receive_date (date) в том же цикле for, который я использовал в receive_events () изменить все даты в моих списках списков на int, которые возвращают дни в году.так, например, если я введу «2018-01-01» в мой список списков, он будет заменен на 1, а если я введу «2018-12-31», это будет 365. Функция receive_date (date) уже позаботится оделая это int, поэтому моя проблема в том, как я вызываю эту функцию в receive_events (), чтобы я мог получить доступ к каждому индексу, у которого есть дата в моем списке списков, чтобы я мог заменить их на int.Это всего лишь пример моего списка списков, потому что мои списки на самом деле представляют собой файл file.txt, и он содержит 160 строк.Но вы получите картину.

PS Я чувствую, что мою проблему очень легко решить.Я просто думаю, что я все еще борюсь с вызовом функции в другой, и у меня также возникают проблемы с достижением индекса всех моих подсписков в моих списках.Поэтому, если вы не уверены, что понимаете мое объяснение, просто попробуйте написать что-то очень простое, что может показать мне, как я могу реализовать свою функцию с правильным индексом, чтобы я мог достичь их всех в моем цикле.

1 Ответ

0 голосов
/ 15 октября 2018

Предположим, ваш список:

a = [['Musique', 'Shawn Phillips', '2018-08-24', '2018-08-24'], ['Musique', 
      "L'avenue Royale fête l'été!", '2018-08-25', '2018-08-25'], ['Musique', 
      'Perséides musicales', '2018-08-03', '2018-08-03'], ['Musique', 'Gaétan 
      Leclerc chante Félix et…', '2018-08-17', '2018-08-17'], ['Musique', 'The 
      Ring of Fire : a Johnny Cash Experience', '2018-07-21', '2018-07-21']]

Теперь напишите функцию для получения даты года:

def get_date(a):
    try:
        a = [int(i) for i in a.split('-')]
        return date(*a).strftime('%j')
    except ValueError:
        return a

Теперь получите новый список, используя следующее понимание списка:

from datetime import date
b = [[get_date(i) for i in j] for j in a]

Вывод:

[['Musique', 'Shawn Phillips', '236', '236'],
 ['Musique', "L'avenue Royale fête l'été!", '237', '237'],
 ['Musique', 'Perséides musicales', '215', '215'],
 ['Musique', 'Gaétan Leclerc chante Félix et…', '229', '229'],
 ['Musique', 'The Ring of Fire : a Johnny Cash Experience', '202', '202']]

Чтобы получить только две последние цифры даты:

a = '2018-08-24'
b = '-'.join(a.split('-')[1:])
print(b) # will return '08-24'
...