#python #python-3.x
#python #python-3.x
Вопрос:
Я хочу получить пары дат, в течение которых дом занят. Вот почему я пытаюсь добавить дату в список, но datetime.datetime не является итеративным.
Я делаю это в файле booking.py:
import mysql.connector
from datetime import datetime, time
import dateparser
import pendulum
import string
import dateutil.parser
from robot.libraries.DateTime import convert_time
# function to return a tuple from the pendulum object type
def from_pendulum_to_tupple(date):
year = date.year
month = date.month
day = date.day
hour = date.hour
minute = date.minute
return (year, month, day, hour, minute)
# function to check if the room asked is free while looking in the database
def is_the_room_available(name_room, day_only, day_startinghour, day_ending_hour, cnx):
# variables
starting_hour_list = []
ending_hour_list = []
room_list = []
#cursor
cur_select_all = cnx.cursor(buffered=True)
query_select_all = ("SELECT * FROM reservations")
cur_select_all.execute(query_select_all)
# convert the entry starting and ending meeting hour to a tupple
asked_starting_hour = from_pendulum_to_tupple(day_startinghour)
asked_ending_hour = from_pendulum_to_tupple(day_ending_hour)
# select all the name room, starting and ending meeting hour and append them to a list
for i in cur_select_all:
room_list.append(i[1])
starting_hour_list.append(from_pendulum_to_tupple(pendulum.parse(i[2])))
ending_hour_list.append(from_pendulum_to_tupple(pendulum.parse(i[3])))
# ... Other stuff ...
Распечатки возвращают:
cur_select_all:
CMySQLCursorBuffered: SELECT * FROM reservations
i[2]:
2018-08-08 12:00:00
Но когда вы добавляете их в starting_hour_list
, возникает ошибка:
File "C:UsersantoiDocumentsProgrammingNathalie18_2_2019starter-pack-rasa-stackbooking.py", line 42, in is_the_room_available
starting_hour_list.append(from_pendulum_to_tupple(pendulum.parse(i[2])))
File "C:UsersantoiDocumentsProgrammingNathalie18_2_2019starter-pack-rasa-stackstaenvlibsite-packagespendulumparser.py", line 20, in parse
return _parse(text, **options)
File "C:UsersantoiDocumentsProgrammingNathalie18_2_2019starter-pack-rasa-stackstaenvlibsite-packagespendulumparser.py", line 36, in _parse
parsed = base_parse(text, **options)
File "C:UsersantoiDocumentsProgrammingNathalie18_2_2019starter-pack-rasa-stackstaenvlibsite-packagespendulumparsing__init__.py", line 70, in parse
return _normalize(_parse(text, **_options), **_options)
File "C:UsersantoiDocumentsProgrammingNathalie18_2_2019starter-pack-rasa-stackstaenvlibsite-packagespendulumparsing__init__.py", line 111, in _parse
return _parse_iso8601_interval(text)
File "C:UsersantoiDocumentsProgrammingNathalie18_2_2019starter-pack-rasa-stackstaenvlibsite-packagespendulumparsing__init__.py", line 211, in _parse_iso8601_interval
if "/" not in text:
TypeError: argument of type 'datetime.datetime' is not iterable
Итак, как добавить дату и время в список?
Для воспроизведения:
Код взят из проекта для чат-бота.
Комментарии:
1. Также предоставьте исходный код для
from_pendulum_to_tupple
2. @DeveshKumarSingh Да, только что сделал это. Это было в ссылке.
Ответ №1:
Из чтения pendulum
документации кажется, что вы передаете datetime
объект вместо str
того, который pendulum.parse(str)
необходим. Вы можете использовать pendulum.instance(datetime object)
вместо parse(str)
, но поскольку это уже datetime
объект, вам не нужен этот дополнительный шаг (в зависимости от того, как вы реализовали from_pendulum_to_tuple
).
# select all the name room, starting and ending meeting hour and append them to a list
print("cur_select_all: ")
print(cur_select_all)
# I wanted to unpack your tuple to make it easier to read
# but I do not know how big your tuple is so I added the *rest syntax
# which puts the rest of the elements in a new list called rest.
for x, room, start_time, end_time, *rest in cur_select_all:
room_list.append(room)
print("start_time: ", start_time)
starting_hour_list.append(from_pendulum_to_tupple(start_time))
ending_hour_list.append(from_pendulum_to_tupple(end_time))
Комментарии:
1. Спасибо за ответ. Тем не менее, если
room_list
это список в самом начале,for x, room_list, start_time, end_times, *rest in cur_select_all
то теперь он является строкой. Таким образом, он создаетAttributeError: 'str' object has no attribute 'append'
2. @ThePassenger опечатка. Исправлено.