You are creating a script that writes to text by treating the calendar list as a repeat statement.
I'm implementing the ability to bundle and display duplicate schedules, but it doesn't work as I want.
The final output value (body in the code) should come out like this:
2019-01-01 (Tue):
New Year's Day
2019-01-05 (Sunday)~2019-02-03 (Sun):
winter vacation
2019-02-04 (Monday):
winter vacation
Lunar New Year holiday
2019-02-05 (Tuesday):
winter vacation
the Lunar New year
2019-02-06 (Wednesday):
winter vacation
Lunar New Year holiday
2019-02-07 (Friday)~2019-02-28 (Thursday):
winter vacation
But when you run the code, it looks like this:
2019-01-01 (Tue):
New Year's Day
2019-01-05 (Sat):
winter vacation
2019-01-06 (Sunday)~2019-02-03 (Sun):
winter vacation
2019-02-04 (Monday):
winter vacation
Lunar New Year holiday
2019-02-05 (Tuesday):
winter vacation
the Lunar New year
2019-02-06 (Wednesday):
winter vacation
Lunar New Year holiday
2019-02-07 (Thursday):
winter vacation
2019-02-08 (Friday)~2019-02-28 (Thursday):
winter vacation
Although the schedule overlaps from January 5th to February 3rd, January 5th is separately listed.
prev_schdl = None
schdl_start_date = None
schdl_end_date = None
for i in schdls:
date = datetime.date(int(i[0]), int(i[1]), int(i[2])) #year, month, day
prsnt_schdl = pstpr(i[3]) #Schedule
if prsnt_schdl:
if not schdl_start_date:
schdl_start_date = date
schdl_end_date = date
If prsnt_schdl == prev_schdl: # Update the end date if it is the same as the previous schedule
schdl_end_date = date
elif schdl_start_date:
If not schdl_start_date == schdl_end_date: # If not a one-day schedule
body = "%s%s(%s)~%s(%s):\n%s\n" % (
body, schdl_start_date, wday(schdl_start_date), schdl_end_date,
wday(schdl_end_date), prev_schdl) # YYYY-MM-DD(Weekday)
body = "%s%s(%s):\n%s\n" % (body, date, wday(date), prsnt_schdl) # YYYY-MM-DD(Weekday)
# Initialize variables
schdl_start_date = None
schdl_end_date = None
prev_schdl = prsnt_schdl #Save the previous schedule
If prev_schdl: # Record even if it's the last schedule of the month
body = "%s%s(%s)~%s(%s):\n%s\n" % (body, schdl_start_date, wday(schdl_start_date), schdl_end_date,
wday(schdl_end_date), prev_schdl) # YYYY-MM-DD(Weekday)
In the above code, schdls is a list, and
[(2019, 1, 1, 'New Year'), (2019, 1, 2, 'No Schedule'), (2019, 1, 3, 'No Schedule'), (2019, 1, 4, 'No Schedule'), (2019, 1, 6, 'Winter 1, 9, 'Non-Saturday Holiday'), (2019, 'Winter 1, 9, 'Vacation', 'Vacation', (2019, 'Vacation', 'Vacation', '19, 1, 2, 2019', '19, winter 1, 2, '19, 2019', '19, 2019', '19, 1, 2, 'No Schedule'9, 1, 14, 'Winter Vacation'), (2019, 1, 15, 'Winter Vacation'), (2019, 1, 16, 'Winter Vacation'), (2019, 1, 17, 'Winter Vacation'), (2019, 1, 18, 'Winter Vacation'), (2019, 1, 19, 'Saturday Holiday'), (2019, 1, 20, 'Winter Vacation' (2019, 'Winter Vacation', 'Winter Vacation', 'Winter Vacation', 'Winter Vacation', (2019, 1, 19, 21, 22, 2019', 'Winter Vacation'Hak'), (2019, 1, 29, 'Winter Vacation'), (2019, 1, 30, 'Winter Vacation'), (2019, 1, 31, 'Winter Vacation'), (2019, 2, 1, 'Winter Vacation'), (2019, 2, 2, 3, 'Winter Vacation'), (2019, 2, 4, 'Winter Vacation' (Winter Vacation 2, 2019), 'Winter Vacation 2, 'Winter Vacation', (Winter 2, 2019), 'Winter Vacation 2, 2019', 'Winter Vacation 2, 2019', 'Winter Vacation 2, 2019', 'N', 'Winter vacation', 'Winter vacation 2, 2019', 'Winter vacation 2, 2019', 'Winter vacation 2, 2019', 'Winter vacation', '9, 2, 12, 'Winter Vacation'), (2019, 2, 13, 'Winter Vacation' (2019, 2, 14, 'Winter Vacation'), (2019, 2, 15, 'Winter Vacation' (2019, 2, 16, 'NSaturday Holiday'), (2019, 2, 17, 'Winter Vacation' (2019, 2, 18, 'Winter Vacation'), 'Winter 2, 18, 'Winter Vacation' (2019, 2, 'Winter Vacation' (2019, 2, 14, 'Winter Vacation'), '20', 'Winter Vacation', '2', 'Winter vacation', 'Winter vacation', '2', 'Winter vacation', 'Winter vacation', '2', '20', 'Winter vacation',(2019, 2, 27, Winter Vacation), (2019, 2, 28, Winter Vacation)]
This is how the value is included.
pstpr is a function that removes unnecessary information such as Saturday holidays.
What should I do?
Modify: Attach a code that is practically executable.
import datetime
prev_schdl = None
schdl_start_date = None
schdl_end_date = None
schdls = [(2019, 1, 1, 'New Year'), (2019, 1, 2, 'No schedule'), (2019, 1, 3, 'No schedule', (2019, 1, 4, 'No schedule'), (2019, 1, 5, 'Winter Vacation'), (2019, 1, 6, 'Winter Vacation'), (2019, 1, 7, 'Winter Vacation' (2019), 'Winter 1, 19, '19, 'Vacation', (Winter vacation', '19, winter 1, 2019, '19, vacation', '19, vacation', '19, 12, 2019', '19, vacation') 'Winter Vacation'), (2019, 1, 16, 'Winter Vacation'), (2019, 1, 17, 'Winter Vacation'), (2019, 1, 18, 'Winter Vacation'), (2019, 1, 20, 'Winter Vacation'), (2019, 1, 21, 'Winter Vacation'), (2019, 1, 22, 'Winter Vacation'), (2019, 'Winter Vacation' (27), 'Winter Vacation' (2019, 1, 19, 26, 'Winter Vacation' (27), 'Winter Vacation' (27), 'Winter Vacation', 'Winter Vacation' (2019, 2019', 'Winter Vacation', 'Winter Vacation', '24, 2019', 'Winter Vacation', 'Winter Vacation', ''), (2019, 1, 31, 'Winter Vacation'), (2019, 2, 1, 'Winter Vacation'), (2019, 2, 2, 'Winter Vacation'), (2019, 2, 3, 'Winter Vacation'), (2019, 2, 4, 'Winter Vacation\nNew Year'), (2019, 2, 6, 'Winter Vacation\nNew Year' (Winter Vacation', 'Winter Vacation', 'Winter 2, 2019', 'Winter Vacation', 'Winter 2, 2019', '19', 'Winter Vacation', 'Winter Vacation', '1, 2,', '1, 2,', 'Winter Vacation', '19, 2, 2019', 'Winter Vacation', '19, 2, 2019', 'Winter'), (2019, 2, 15, 'Winter Vacation'), (2019, 2, 16, 'Winter Vacation'), (2019, 2, 17, 'Winter Vacation'), (2019, 2, 18, 'Winter Vacation'), (2019, 2, 19, 'Winter Vacation'), (2019, 2, 21, 'Winter Vacation' (2019, 2, 21, 'Winter Vacation'), 'Winter 2, 16, '20', 'Winter Vacation' (2019, 2, 19, '29, '2', '2', '2', '2', '2', '20', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '
body = str()
for i in schdls:
date = datetime.date(int(i[0]), int(i[1]), int(i[2])) #year, month, day
prsnt_schdl = i[3] # Schedule
if prsnt_schdl:
if not schdl_start_date:
schdl_start_date = date
schdl_end_date = date
If prsnt_schdl == prev_schdl: # Update the end date if it is the same as the previous schedule
schdl_end_date = date
elif schdl_start_date:
If not schdl_start_date == schdl_end_date: # If not a one-day schedule
body = "%s%s(%s)~%s(%s):\n%s\n" % (
body, schdl_start_date, "day", schdl_end_date,
"Day", prev_schdl) #YYYY-MM-DD (Weekday)
body = "%s%s(%s):\n%s\n" % (body, date, "day", prsnt_schdl) #YYYY-MM-DD(Weekday)
# Initialize variables
schdl_start_date = None
schdl_end_date = None
prev_schdl = prsnt_schdl #Save the previous schedule
If prev_schdl: # Record even if it's the last schedule of the month
body = "%s%s(%s)~%s(%s):\n%s\n" % (body, schdl_start_date, "day", schdl_end_date,
"Day", prev_schdl) #YYYY-MM-DD (Weekday)
print(body)
I'm sorry for answering your question.
from itertools import groupby
schdls = [(2019, 1, 1, 'aa'), (2019, 1, 5, 'vacation'), (2019, 1, 6, 'vacation'), (2019, 1, 7, 'vacation'), (2019, 1, 8, 'vacation'), (2019, 1, 9, 'vacation'), (2019, 1, 10, 'vacation'), (2019, 1, 11, 'vacation'), (2019, 1, 12, 'vacation'), (2019, 1, 13, 'vacation'), (2019, 1, 14, 'vacation'), (2019, 1, 15, 'vacation'), (2019, 1, 16, 'vacation'), (2019, 1, 17, 'vacation'), (2019, 1, 18, 'vacation'), (2019, 1, 19, 'vacation'), (2019, 1, 20, 'vacation'), (2019, 1, 21, 'vacation'), (2019, 1, 22, 'vacation'), (2019, 1, 23, 'vacation'), (2019, 1, 24, 'vacation'), (2019, 1, 25, 'vacation'), (2019, 1, 26, 'vacation'), (2019, 1, 27, 'vacation'), (2019, 1, 28, 'vacation'), (2019, 1, 29, 'vacation'), (2019, 1, 30, 'vacation'), (2019, 1, 31, 'vacation'), (2019, 2, 1, 'vacation'), (2019, 2, 2, 'vacation'), (2019, 2, 3, 'vacation'), (2019, 2, 4, 'vacation\nbb'), (2019, 2, 5, 'vacation\naa'), (2019, 2, 6, 'vacation\nbb'), (2019, 2, 7, 'vacation'), (2019, 2, 8, 'vacation'), (2019, 2, 9, 'vacation'), (2019, 2, 10, 'vacation'), (2019, 2, 11, 'vacation'), (2019, 2, 12, 'vacation'), (2019, 2, 13, 'vacation'), (2019, 2, 14, 'vacation'), (2019, 2, 15, 'vacation'), (2019, 2, 16, 'vacation'), (2019, 2, 17, 'vacation'), (2019, 2, 18, 'vacation'), (2019, 2, 19, 'vacation'), (2019, 2, 20, 'vacation'), (2019, 2, 21, 'vacation'), (2019, 2, 22, 'vacation'), (2019, 2, 23, 'vacation'), (2019, 2, 24, 'vacation'), (2019, 2, 25, 'vacation'), (2019, 2, 26, 'vacation'), (2019, 2, 27, 'vacation'), (2019, 2, 28, 'vacation')]
for v, g in groupby(schdls, lambda k: k[3]):
l = [*g]
if l[0] != l[-1]:
print('{}-{:02d}-{:02d} (day) to {}-{:02d}-{:02d} (day): '.format(*l[0][:3], *l[-1][:3]))
else:
print('{}-{:02d}-{:02d} (week):'.format(*l[0][:3]))
print(v)
It was easy to do with itertools.groupby.
© 2024 OneMinuteCode. All rights reserved.