Задать вопрос
43FUN
@43FUN
python/django developer

Как проверить является ли дата рабочим днем основываясь на данных в файле?

По ссылке есть csv файл содержащий график выходных дней на год. data.gov.ru/opendata/7708660670-proizvcalendar/dat... . Основываясь на данных в файле нужно проверить является ли введенная дата рабочим днем. Подтолкните на мысль как реализовать. Спасибо.
  • Вопрос задан
  • 377 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Xander017
Я вот так делал:

import csv

holiday = input ()

with open('file.csv') as f:
 readCSV = csv.reader(f, delimeter=',')
 for row in readCSV:
  if holiday == row[0]:
   print('ok')


UPD:
На основе комментариев:


import csv

year = input()
mont = input()
day = input()

with open('33.csv', encoding='utf-8') as f:
    readCSV = csv.reader(f, delimiter=',')
    for row in readCSV:
        if year == row[0]:
            months = row[1:12]
            i = int(int(mont) - 1)
            if day or day+"*" not in months[i]:
                        print("Выходной")
            else:
                        print("Рабочий")
Ответ написан
Sly_tom_cat
@Sly_tom_cat
.
У вас достаточно сложная структура данных в файле (даже для чисто-человеческого восприятия, я не говорю о восприятии бухгалтерском :) ).
Т.е. нужно решить задачу импорта этой структуры во внутреннюю, удобную для обработки структуру данных.
т.е. вам нужно из первого элемента брать год, а из 12 последующих колонок брать рабочие дни (нужно еще звездочки отсекать у сокращенных рабочих дней). А уже в этой считанной структуре организовывать поиск.

Я бы засунул эти данные в структуру вложенного словаря, что то типа:
{1999: {
   1: {1,2,3,4,6,7,9,10,16,17,23,24,30,31}, 
   2:{6,7,13,14,20,21,27,28}, 
   3: {6,7,8,13,14,20,21,27,28},
    .... }
 2000: {
   1: .....
   12: ...}
...
}


Тогда искать в ней дату (заданную как year, month, day) просто:
if day in dict[year][month]:
  print("Рабочий день")
else:
  print("Нерабочий день")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы